繁体   English   中英

MySQL有限结果后一行总和

[英]MySQL one row of sum after limited results

我有此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 |
+----------+-----+

我正在寻找的是另一行,给出所有值的总和 ,例如:

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

有什么办法可以实现? 最好没有程序。

使用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)

您可以使用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

使用联盟

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM