首页 > 解决方案 > 基于聚合列的具有汇总和排序的 MySQL groupby

问题描述

我正在尝试按每个 customer_id 的金额进行分组,最后使用汇总的“总”金额

select ifnull(customer_id,'Total') as 'Customer_id'
 ,sum(amount) as 'Amount' 
  from payment 
 group 
    by customer_id with rollup 
 order 
    by customer_id = 'Total'
 , sum(amount) desc;

我已尝试按照此答案中的建议使用 customer_id = 'Total' ,但没有帮助。

我想根据总和(数量)值按升序对数据进行排序,但所有列的“总计”应该是最后一个。

客户ID 数量
全部的 65819.36
15 134.68
16 120.71
17 98.79
18 91.78
19 125.76
20 115.70
21 155.65
22 113.78
23 119.70

标签: mysql

解决方案


customer_id将其用作别名以及作为表中的列都无济于事。

确定在?ORDER BY之后检查该列名ifnull()?也许它是customer_id从表格中检查,而不是您的计算?这是模棱两可的。

为了明确起见,请始终引用源表中的列...

ORDER BY
    payment.customer_id IS NULL,
    SUM(payment.amount) DESC

更好的是,GROUPING()按照手册使用该功能...

所以...

ORDER BY
    GROUPING(payment.customer_id),
    SUM(payment.amount) DESC

这能够区分恰好出现在数据中的NULL(或)与实际分组列之间的区别。'TOTAL'ROLLUP


推荐阅读