加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

PostgreSQL聚合函数的filter子句

发布时间:2020-12-13 16:11:56 所属栏目:百科 来源:网络整理
导读:一张表存储了学生id,科目,分数三个字段,求每个学生60分以下与参加的总科目占比。(今天电脑不好用,图片总是这样) ? 其实一个count(*) filter? 就可以查出来,但是没用过PG的一个人竟然说我这么简单的SQL查询都不会,只是因为我没有用嵌套查询。回来总结

一张表存储了学生id,科目,分数三个字段,求每个学生60分以下与参加的总科目占比。(今天电脑不好用,图片总是这样)

?

其实一个count(*) filter? 就可以查出来,但是没用过PG的一个人竟然说我这么简单的SQL查询都不会,只是因为我没有用嵌套查询。回来总结了以下,自己想到了以下几种方法(只查询出了对应的数目没有做除法):

?

--filter函数

select stu_id,count(*),count(*) filter (where score<60) as "不及格"

from sherry.agg_filter

group by stu_id

?

--使用case when

select stu_id,sum(case when score<60 then 1 else 0) as "不及格"

from sherry.agg_filter group by stu_id

?

--关联查询

select stu_id,(select count(*) as c from sherry.agg_filter b where a.stu_id = b.stu_id and b.score < 60) as t2

from sherry.agg_filter a

group by a.stu_id

?

--临时表关联

with raw as(

select stu_id,count(*) as c1 from sherry.agg_filter

where score < 60

group by stu_id

),

raw2 as(

select stu_id,count(*) as c2

from sherry.agg_filter?

group by stu_id)

select b.stu_id,c1,c2

from raw a

right join raw2 b

on a.stu_id = b.stu_id

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读