Получить несколько наборов результатов из запроса SELECT

У меня есть большая таблица на postgresql, и я хочу получить несколько наборов результатов в качестве вывода 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
  ...
  ...

Что я хочу это:

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 параметром, чтобы получить набор результатов для каждого dns_name (google.com, facebook.com, yahoo.com...)

Не стесняйтесь на любые вопросы!

1 ответ

Вы не можете получить несколько наборов результатов. Вы должны будете попросить каждую отдельную серию из вашей заявки. Fisrt получить все имена:

select distinct dns_name
from dns_table
order by dns_name;

Затем попросите серию передать имя в качестве параметра:

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;
Другие вопросы по тегам