mysql - 基于聚合列的具有汇总和排序的 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 |
解决方案
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
推荐阅读
- python - NumPy 中数组的形状
- reactjs - 无法访问函数中的道具
- json - ansible, jinja2, json - 在 Jinja 中使用 json_query?
- python - Animating a curve in Maya with Python
- javascript - 在全局范围内查找具有特定方法的 javascript 对象
- c# - C#、N 层、MVC | 错误:“对象引用未设置为对象的实例。”
- wiremock - 来自键=值对的wiremock请求匹配
- python - 如何在执行另一个命令时打破 discord.py 命令中的循环?
- java - MapStruct:如何映射到现有目标?
- python - 在循环中创建 df 表单列表理解