我正在运行查询报告,并使用汇总来获取总计。我的一个列有一个文本字段,最后复制。例如:
SELECT * FROM transactions;
transNum | itemid | description | qty
---------------------------------------
01 | 01 | DESC1 | 14
02 | 01 | DESC1 | 05
03 | 01 | DESC1 | 01
04 | 02 | DESC2 | 02
05 | 02 | DESC2 | 01
06 | 02 | DESC2 | 02
07 | 03 | DESC3 | 05
08 | 03 | DESC3 | 06
09 | 03 | DESC3 | 01
SELECT itemid,description,qty FROM transactions GROUP BY id WITH ROLLUP;
itemid | description | qty
----------------------------
01 | DESC1 | 20
02 | DESC2 | 05
03 | DESC3 | 12
| DESC3 | 37
这是一个粗略的例子,我的实际数据包含多个表格。
现在,我知道DESC3正在重复,因为我没有按描述字段进行分组,但有没有可以解决这个问题的函数?
其他数据库引擎有一个GROUPING函数,这基本上是我需要的,但在MySQL中。
感谢您的帮助
答案 0 :(得分:3)
好的,然后试试这个:
SELECT a.itemid, b.description, a.total
FROM
(
SELECT itemid, sum(qty) as total
FROM transactions
GROUP BY itemid WITH ROLLUP
) as a
LEFT JOIN item b ON a.itemid=b.itemid
假设您有一个名为item
的表,其中的项目描述以itemid
为主。
答案 1 :(得分:2)
从docs开始,无法改变最后一行的内容。
结果集在NULL
行的1st column
中带有rollup
值,以便您可以在应用中识别它。
这是一个使用它的SQL小提琴:http://sqlfiddle.com/#!8/d611d/8
如您所见,它会重复rollup
行中的上述说明。
答案 2 :(得分:0)
使用:case when itemid is null then Total