mysql - 获取每月第 n 个最高消费客户的 Mysql 查询
问题描述
我正在使用 sakila.payment 表。列:payment_id、customer_id、staff_id、rental_id、amount、payment_date、update_date
我正在使用此查询来让客户每月花费最高金额。我如何才能获得每月第 N 个最高消费客户?
select customer_id,`month`,max(total_amount) from
(SELECT customer_id,count(customer_id) as `count`,month(payment_date) as `month`,sum(amount) as total_amount
FROM sakila.payment
group by month(payment_date),customer_id
order by `month` asc, `total_amount` desc)t
group by `month`
解决方案
尝试以下操作,如果您正在使用,MySQL 8.0
那么它将与row_number()
select
customer_id,
month,
total_amount
from
(
select
customer_id,
month,
total_amount,
row_number() over (partition by month order by total_amount desc) as rnk
from
(
select
customer_id,
count(customer_id) as `count`,
month(payment_date) as `month`,
sum(amount) as total_amount,
from sakila.payment
group by
month(payment_date),
customer_id
) cal
) mnt
where rnk = 1
推荐阅读
- python - 如何在不创建本地副本的情况下从在线 gzip 文件中读取数据?
- lambda - 如何为 serverless.yml 中的所有功能设置默认授权人
- html - 根据父 div 更改嵌套子 div
- php - Codeigniter - 不显示任何数据
- arrays - 使用Angular从具有另一组值的数组中查找匹配值的最佳方法
- c# - 如何通过 linq 查询读取所有代码并保存到单个集合中
- android - 在我按下android中的按钮之前如何使任何视图增长。(kotlin或java无关紧要)?
- php - 提交 POST 表单后使用 PHP 顺利重新加载表格
- javascript - 如何在javascript中比较两个日期
- javascript - 捕获匹配的第一个或第二个实例