MySQL改变最后一行汇总

时间:2012-10-17 17:39:23

标签: mysql sql group-by rollup

我正在运行查询报告,并使用汇总来获取总计。我的一个列有一个文本字段,最后复制。例如:

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中。

感谢您的帮助

3 个答案:

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