我有一张包含这些值的表格。 我想查询此表的限制为5,但我希望总行始终是结果集的一部分。
表描述:
id desc value
1 A 100
2 B 200
3 C 300
4 D 400
5 E 500
6 F 600
7 G 700
8 H 800
9 I 900
10 Total 1000
我想知道它是否可能。
答案 0 :(得分:3)
像这样:
SELECT id, `desc`, value FROM table
UNION ALL
SELECT MAX(id), 'Total', SUM(value) FROM table;
但是,如果需要将表中的选择限制为仅5,则必须在两个子查询中使用LIMIT
,如下所示:
SELECT id, `desc`, value
FROM
(
SELECT id, `desc`, value FROM table1
ORDER BY id
LIMIT 5
) t
UNION ALL
SELECT MAX(id), 'Total', SUM(value)
FROM
(
SELECT id, `desc`, value FROM table1
ORDER BY id
LIMIT 5
) t;
对于您的样本数据,这将为您提供:
| ID | DESC | VALUE |
----------------------
| 1 | A | 100 |
| 2 | B | 200 |
| 3 | C | 300 |
| 4 | D | 400 |
| 5 | E | 500 |
| 5 | Total | 1500 |
请注意: Total
行将是所有先前value
值的总和,但是,在您的示例数据中,它不是总数。
答案 1 :(得分:1)
单个查询中有点乱。也许您可以使用UNION查询:
SELECT `id`, `value` FROM `table` LIMIT 5
UNION
SELECT 'Total', SUM(`value`) AS `value` FROM `table`
这将从表中产生5行,在<。p>下产生“总计”行
答案 2 :(得分:0)
您也可以使用WITH ROLLUP
。但缺点是缺少一列:ID
。
SELECT COALESCE(`desc`, 'TOTAL') `desc`, SUM(`value`) Value
FROM Description
GROUP BY `desc`
WITH ROLLUP