mysql - 需要报告客户订单的最新状态,以及每个客户的每个订单状态的计数
问题描述
数据库布局:
这个问题基本上总结了我需要返回的内容。
每个客户有多个订单,但我需要报告最新订单的状态。
我还需要为每个客户的订单('Cancelled''Disputed'和'On Hold')制作三列订单状态计数。
如果有人能指出我正确的方向,那将非常有帮助。
解决方案
您可以使用窗口函数和条件聚合:
select customernumber,
max(case when rn = 1 then status end) as last_order_status,
sum(status = 'Cancelled') cnt_cancelled,
sum(status = 'Disputed' ) cnt_disputed,
sum(status = 'On Hold' ) cnt_on_hold
from (
select o.*,
row_number() over(partition by customernumber order by orderdate desc) rn
from orders o
) t
group by customernumber
请注意,row_number()
仅在 MySQL 8.0 中可用。在早期版本中,您可以使用 correlatead 子查询来检索最新状态:
select customernumber,
(select o1.status from orders o1 where o1.customernumber = o.customernumber order by o1.orderdate desc limit 1) as last_order_status,
sum(status = 'Cancelled') cnt_cancelled,
sum(status = 'Disputed' ) cnt_disputed,
sum(status = 'On Hold' ) cnt_on_hold
from orders o
group by customernumber
推荐阅读
- reactjs - 错误:不变违规:元素类型在测试时无效
- sql-server - SQL Server 的前 1000 个素数
- swift - 当我从 Firebase 存储上传新图像时,imageView 不会更改图像
- arrays - 如何访问状态数组中的属性
- python - 如何在类型提示中指定 dict_values?
- php - 全线背景颜色
- javascript - 使用 Javascript 向 html 添加类
- jax-rs - Swagger:@ApiModel 注释被忽略
- angularjs - Laravel - 将表单输入从角度传递到 API 控制器?
- java - 检查环境变量是否设置了运行时spring boot