0

私はこのUserテーブルを持っています:

+----------+-------+
| Username | Value |
+----------+-------+
| User4    |     2 |
| User1    |     3 |
| User3    |     1 |
| User2    |     6 |
| User4    |     2 |
+----------+-------+

そして、このクエリを実行して、上位 2 つの合計を取得します。

SELECT Username, SUM(Value) AS Sum
FROM User
GROUP BY Username
ORDER BY Sum DESC
LIMIT 0, 2

結果として私に与えます:

+----------+-----+
| Username | Sum |
+----------+-----+
| User2    |   6 |
| User4    |   4 |
+----------+-----+

私が探しているのは、次のようなすべての値の合計を示すもう 1 つの行です。

+----------+-----+
| Username | Sum |
+----------+-----+
| User2    |   6 |
| User4    |   4 |
| All      |  14 |
+----------+-----+

それを達成する方法はありますか?無手続きが望ましい。

4

3 に答える 3

2

WITH ROLLUP修飾子を使用できます:

SELECT COALESCE(Username, 'All'), SUM(Value) AS Sum
FROM User
GROUP BY Username WITH ROLLUP
ORDER BY Sum DESC 

または、すべての合計とともに上位 2 つだけが必要な場合:

 SELECT Username, s
 FROM (
    SELECT Username, s
    FROM (
      SELECT COALESCE(Username, 'All') AS Username, SUM(Value) AS s
      FROM User
      GROUP BY Username WITH ROLLUP  ) AS t
    ORDER BY s DESC      
    LIMIT 0, 3) AS s
 ORDER BY IF(Username = 'All', 0, s) DESC
于 2016-03-11T10:55:03.557 に答える
1

これを行うには、UNION ALL を使用します。

(SELECT Username, SUM(Value) AS Sum
FROM User
GROUP BY Username
ORDER BY Sum DESC
LIMIT 0, 2)
UNION ALL
(SELECT 'All', SUM(Value) AS Sum FROM User)
于 2016-03-11T10:54:05.490 に答える