2014-05-13 7 views
0

postgresql에 큰 테이블이 있는데 가능한 경우 복수 결과 ​​집합을 SELECT 쿼리 출력으로 가져 오려고합니까?SELECT 쿼리에서 여러 결과 집합 가져 오기

내 표는 다음과 같습니다

select * from dns_table 

id | dns_name | ip_source | mac_source  |   query_time   
-----+----------------+------------+-------------------+---------------------------- 
    1 | google.com  | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:03.503938 
    2 | facebook.com | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:04.567417 
    3 | google.com  | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:05.372453 
    4 | youtube.com | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:05.636633 
    5 | facebook.com | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:06.420067 
    6 | yahoo.com  | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:06.685871 
    7 | google.com  | /10.0.0.6 | 00-00-00-00-00-06 | 2014-05-12 10:03:07.198905 
    8 | youtube.com | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:07.524503 
    9 | wikipedia.org | /10.0.0.1 | 00-00-00-00-00-01 | 2014-05-12 10:03:07.747143 
    10 | facebook.com | /10.0.0.6 | 00-00-00-00-00-06 | 2014-05-12 10:03:08.287584 
    11 | yahoo.com  | /10.0.0.5 | 00-00-00-00-00-05 | 2014-05-12 10:03:08.572827 
    ... 
    ... 

내가 원하는 것은 : 순서대로 매개 변수를 google.com을 대체 할 수있는 경우

SELECT 
    count(dns_name) as hits, 
    dns_name, 
    to_char(query_time - interval '1 month','YYYY,MM,DD,HH24,MI') as qt 
FROM dns_table 
where dns_name like '**google.com**' 
group by dns_name, qt 
order by qt; 

hits | dns_name |  qt   
------+------------+------------------ 
    61 | google.com | 2014,04,12,10,03 
    40 | google.com | 2014,04,12,15,05 
    45 | google.com | 2014,04,13,09,34 

그래서 궁금하네요 각 ( google.com, facebook.com, yahoo.com, ...)에 대한 결과 집합을 얻으십시오.

궁금한 점이 있으시면 언제든지 알려주세요.

+0

정말 ... 당신이 결과로 "테이블"을하지 않는 이해가 안 :

select distinct dns_name from dns_table order by dns_name; 

는 다음 매개 변수로 이름을 전달 시리즈 요청 선택 쿼리의 "하위 테이블"을 얻을 수 있을지 어떻게 보지 않습니다. 어떻게 행동 할 것이라고 기대합니까? 각 매개 변수에 대해 별도의 쿼리를 실행할 수 있습니다. – mareckmareck

+2

'where' 조건을 제거하고'dnsname'을 그룹에 추가 하시겠습니까? – sgeddes

+0

내가 원하는 것은 (너무 지루한) 테이블의 모든 dns_name에 대해 동일한 쿼리를 반복하지 않는 것이다! – midobAck

답변

0

여러 결과 집합을 가져올 수 없습니다. 신청서에서 각 시리즈를 요청해야합니다. Fisrt 모든 이름을 얻을 :

select 
    count(dns_name) as hits, 
    dns_name, 
    date_trunc('minute', query_time) as qt 
from dns_table 
where 
    query_time > now() - interval '1 month' 
    and 
    dns_name = :dns_name 
group by qt 
order by qt; 
+0

@Clodoaldo에 감사하지만 그것이 내가 원하는 것입니다! – midobAck

+0

@midob 시리즈 쿼리 –

+0

에 대해 편집 됨 오류 : "또는"근처에 구문 오류가 있습니다. 줄 9 : dns_name = : dns_name – midobAck