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ように 2 つのサブクエリ内で使用する必要があります。

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。ただし、欠点は、1 つの列が欠落していることです: ID.

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