如何实现查询,以便我根据需要获得结果

时间:2012-12-11 07:47:42

标签: php mysql sql

我有一张包含这些值的表格。 我想查询此表的限制为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

我想知道它是否可能。

3 个答案:

答案 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 |

SQL Fiddle Demo

请注意: 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