Использование подзапроса в качестве ссылки для генерации нескольких результатов в одном запросе - PullRequest
0 голосов
/ 31 января 2020

Я использую sqlite для хранения некоторых данных, и у меня есть Подзапрос, который я хочу использовать для вывода нескольких результатов, и Подзапрос выглядит так:

select * from s_stats where datetime(start_time) > datetime('now','localtime','-3 days') group by src_ip,src_port,dest_ip,dest_port order by start_time desc 

Я хочу чтобы использовать вышеупомянутый запрос для генерации нескольких отфильтрованных данных в одном запросе.

Один результат достигается этим:

 select start_time,action,count(*) from (select * from s_stats where datetime(start_time) > datetime('now','localtime','-3 days') group by src_ip,src_port,dest_ip,dest_port order by start_time desc) where action='BLOCKED' group by action,start_time order by start_time desc

Я также хочу сделать:

select start_time,action,count(*) from (select * from s_stats where datetime(start_time) > datetime('now','localtime','-3 days') group by src_ip,src_port,dest_ip,dest_port order by start_time desc) group by start_time order by start_time desc

Есть ли способ объединить оба запроса в один запрос, используя подзапрос в качестве некоторой переменной?

Спасибо

1 Ответ

2 голосов
/ 31 января 2020

Вы можете использовать условное агрегирование, чтобы получить оба значения в одном запросе:

select start_time,
       action,
       count(case when action = 'BLOCKED' then 1 end) as blocked,
       count(*) as total
from (select * 
      from s_stats 
      where datetime(start_time) > datetime('now','localtime','-3 days') 
      group by src_ip,src_port,dest_ip,dest_port 
      order by start_time desc)
group by start_time 
order by start_time desc
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...