0

次のテスト データが与えられます。

╔═════════╦══════╦═══════╗
║ 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 ║
╚═════════╩════════════╩══════════════╝

私がこれまでに持っているのは、own_80_cnt です。しかし、そのすぐ隣に total_80_cnt を追加する方法がわかりません。

SELECT  student,
        SUM(CASE WHEN score = 80 THEN 1 ELSE 0 END) AS own_80_cnt
FROM    mytable 
GROUP BY student;

これは 1 つの SELECT ステートメント内でも可能ですか (推奨)? DBMS はオラクルです。

4

2 に答える 2

0

あなたは分析でそれを行うことができます:

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);
于 2013-01-16T08:21:50.777 に答える
0

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;
于 2013-01-16T08:12:05.270 に答える