Reputation: 2841
I'm using sqlite to store some data and i have a Subquery that i want to reuse to deduce multiple results and the Subquery goes like this :
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
I want to re use the above query to generate multiple filtered data in the same query .
One Result is done by this :
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
I also want to do :
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
Is there any way to combine both the query into one single query by using the subquery as some variable ?
Thanks
Upvotes: 0
Views: 41
Reputation: 147196
You can use conditional aggregation to get both counts in one query:
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
Upvotes: 2