用于组计数和总计数的SQL语句
给出了以下试验数据:用于组计数和总计数的SQL语句,sql,oracle,Sql,Oracle,给出了以下试验数据: ╔═════════╦══════╦═══════╗ ║ STUDENT ║ TEST ║ SCORE ║ ╠═════════╬══════╬═══════╣ ║ Henry ║ 1 ║ 80 ║ ║ Henry ║ 2 ║ 70 ║ ║ Henry ║ 3 ║ 50 ║ ║ Mark ║ 1 ║ 60 ║ ║ Mark ║ 2 ║ 90 ║ ║ Mark ║ 3 ║ 7
╔═════════╦══════╦═══════╗
║ STUDENT ║ TEST ║ SCORE ║
╠═════════╬══════╬═══════╣
║ Henry ║ 1 ║ 80 ║
║ Henry ║ 2 ║ 70 ║
║ Henry ║ 3 ║ 50 ║
║ Mark ║ 1 ║ 60 ║
║ Mark ║ 2 ║ 90 ║
║ Mark ║ 3 ║ 70 ║
║ Frank ║ 1 ║ 80 ║
║ Frank ║ 2 ║ 70 ║
║ Frank ║ 3 ║ 80 ║
╚═════════╩══════╩═══════╝
现在我想看看每个学生的分数是80分的多少倍,然后是80分。大概是这样的:
╔═════════╦════════════╦══════════════╗
║ STUDENT ║ OWN_80_CNT ║ TOTAL_80_CNT ║
╠═════════╬════════════╬══════════════╣
║ Frank ║ 2 ║ 3 ║
║ Mark ║ 0 ║ 3 ║
║ Henry ║ 1 ║ 3 ║
╚═════════╩════════════╩══════════════╝
到目前为止,我拥有的是自己的。但是我不知道如何把总数加在它旁边
SELECT student,
SUM(CASE WHEN score = 80 THEN 1 ELSE 0 END) AS own_80_cnt
FROM mytable
GROUP BY student;
仅在一个SELECT语句中就可以做到这一点(首选)?
DBMS是Oracle。添加一个内联子查询,分别获取等于80的分数
SELECT student,
SUM(CASE WHEN score = 80 THEN 1 ELSE 0 END) AS own_80_cnt,
(SELECT COUNT(*) FROM myTable WHERE score = 80) AS total_80_cnt
FROM mytable
GROUP BY student;
select student, own_80_cnt,
sum(own_80_cnt) over () total_80_cnt
from (select student,
sum(case when score = 80 then 1 else 0 end) as own_80_cnt
from mytable
group by student);
在您的示例中,您显示的是总数,但不是总数80:DDOE没有多大意义:Frank own=2,但总数是3?在Oracle文档中查看GROUP BY的汇总扩展。谢谢!在这两种解决方案中,我应该选择哪一种?(我查询的表有500万条记录)@BaseBallBatBoy test两个然后选择一个:)谢谢!在这两种解决方案中,我应该选择哪一种?(我查询的表有500万条记录)