用于组计数和总计数的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万条记录)