2

我有一张包含这些值的表格。我想以 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

我想知道它是否可能。

4

3 回答 3

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 |

SQL 小提琴演示

请注意:Total行将是所有先前value值的总和,但是,在您的样本数据中,它不是总数。

于 2012-12-11T07:50:23.550 回答
1

这在单个查询中有点混乱。也许您可以使用 UNION 查询:

SELECT `id`, `value` FROM `table` LIMIT 5
UNION
SELECT 'Total', SUM(`value`) AS `value` FROM `table`

这将从表中产生 5 行和下面的“总计”行。

于 2012-12-11T07:50:34.157 回答
0

您也可以使用WITH ROLLUP. 但缺点是缺少一列:ID.

SELECT COALESCE(`desc`, 'TOTAL') `desc`, SUM(`value`) Value
FROM Description
GROUP BY `desc`
WITH ROLLUP
于 2012-12-11T08:07:34.793 回答