6

次のデータを含むテーブルがあります。

Name Score
A     2
B     3
A     1
B     3

次の出力を与えるクエリが必要です。

Name Score
A     2
A     1
Subtotal 3
B    3
B    3
Subtotal 6

SQLコードを教えてください

4

4 に答える 4

21

一部の DBMS (MySQL や SQL-Server など) には、このようなクエリに使用できる句のWITH ROLLUP修飾子があります。GROUP BY

SELECT pk, name,
       SUM(score) AS score
FROM tableX
GROUP BY name, pk                   -- pk is the PRIMARY KEY of the table
  WITH ROLLUP ;

SQL-Fiddleでのテスト


他の DBMS (SQL-Server、Oracle) は、GROUP BY GROUPING SETS使用できる (そしてより強力なWITH ROLLUP)機能を実装しています。

SELECT pk, name,
       SUM(score) AS score
FROM tableX
GROUP BY GROUPING SETS 
  ((name, pk), (name), ());

SQL-Fiddle-2でのテスト


@AndriyM は、GROUP BY ROLLUP(Oracle と SQL-Server によって実装された) もあり、同じ結果が得られることを修正しました (上記の更新された SQL-Fiddle-2 を参照)。

SELECT pk, name,
       SUM(score) AS score
FROM t
GROUP BY ROLLUP 
  (name, pk) ;
于 2013-10-15T17:56:35.593 に答える