如何解决在 PSQL 中使用 Case 或 RoundOff 进行计数和分组并基于点进行透视?有多少学生通过了,有多少学生失败了
学生可以通过或未通过测试。 总分 = 100。 0-30 分表示失败。 31-100 分表示通过考试。
示例: 我有一个叫做瞳孔的表:
CREATE TABLE pupil
(id integer primary key,marks integer,maxmarks integer)
现在插入一些值,如
insert into pupil (id,marks,maxmarks) values (1,11,100),(2,21,(3,60,100);
现在表格如下所示:
id | marks | maxmarks
----+-------+----------
1 | 11 | 100
2 | 21 | 100
3 | 60 | 100
我想看看有多少人在 0-30 之间,有多少人在 31-100 之间
所以我尝试考虑使用 group by 然后获取计数。
我写了这个查询:
select marks,count(*) from pupil group by marks;
它返回给我这个结果:
marks | count
-------+-------
60 | 1
11 | 1
21 | 1
但我不想要那个结果,我期待这个结果。
marks | count
-------+-------
0-30 | 2
30-100 | 1
0-30 也可以是 0 或 30,我不在乎,我主要对计数列感兴趣。 我尝试了各种 group by 和 case 子句,也听说过一种叫做“pivot”的东西,但我不知道该怎么做?
解决方法
最简单的方法是使用条件 GROUP BY
:
SELECT
CASE
WHEN marks <= 30 THEN
'0-30'
ELSE '31-100'
END,COUNT(*)
FROM
pupil
GROUP BY (marks <= 30)
替代方法可能是使用 UNION
子句:
SELECT
'0-30',COUNT(*)
FROM
pupil
WHERE marks <= 30
UNION
SELECT
'31-100',COUNT(*)
FROM
pupil
WHERE marks > 30
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。