我有这个查询
select count(id)filter(where id>2 and id<=50) from table;
我想查找被此过滤器消除的记录
是的!我可以这样做来查找那些记录
select count(id)filter(where id<=2 or id>50) from table;
但是假设我有一个复杂的查询,例如,我在上述查询中用id替换了公式。
我现在有一个公式,可以根据不同的值计算三个不同的时间,如果我想每次都在某种条件下进行过滤,例如可以使用过滤器
这些是我的过滤器:
> start_time<= 40 mins and start_time> 5 mins
> end_time<= 10 mins and end_time> 1 mins
> journey_time<= 80 mins and journey_time> 10 mins
> Total_time(start_time+end_time+journey_time) <= 150 and Total_time(start_time+end_time+journey_time) > 15
如果要过滤,我必须写8次公式(每次和总时间都要过滤<和> =)这将是我的查询
select
avg(start_time_formula)filter(where start_time_formula<= 40 and
start_time_formula>5),
avg(end_time_formula)filter(where end_time_formula<= 10 and
end_time_formula>1),
avg(journey_time_formula)filter(where journey_time_formula<= 80 and
journey_time_formula>10)
from table
where (start_time_formula+end_time_formula+journey_time_formula <=150 and
start_time_formula+end_time_formula+journey_time_formula > 15)
现在,如果我也想查找所有丢弃的值。
我是否必须再写8次相同的公式,以将>替换为<=,将“ AND”替换为“ OR”,这样才能给出丢弃的结果,还是有其他方法可以找到丢弃的值?
更新
我的表格值是
id start_time end_time journey_time Out_time
1 2018-04-06 01:37:36 2018-04-06 10:37:36 2018-04-06 04:37:36 2018-04-06
11:37:36
2 2018-04-16 02:37:36 2018-04-16 08:37:36 2018-04-16 06:37:36 2018-04-16
07:37:36
3 2018-05-10 01:37:36 2018-04-10 11:37:36 2018-04-06 09:37:36 2018-04-10
10:11:36
4 2018-05-10 04:37:36 2018-05-10 5:00:36 2018-05-10 04:47:36 2018-05-10
05:5:36
我的计算是
开始时间=旅程时间-开始时间
旅途时间=结束时间-旅途时间
结束时间=结束时间-结束时间
这是我想要的输出
start_time journey_time end_time discarded
10 mins 13 mins 5 mins 3
谢谢
答案 0 :(得分:0)
使用情况时使用条件,因此您的查询将如下所示
select
sum(case when start_time_formula <= 40 and start_time_formula>5 then 1 else 0 end),
sum(case when end_time_formula<= 10 and end_time_formula>1 then 1 else 0 end) ,
sum(case when where journey_time_formula<= 80 and journey_time_formula>10 then 1 else o end )
from table
where (start_time_formula+end_time_formula+journey_time_formula <=150 and
start_time_formula+end_time_formula+journey_time_formula > 15)