如何解决如何返回每个国家的前 3 名消费客户?
我正在尝试为每个国家/地区的前 3 个消费客户返回这样的表格:
customer_id | 国家 | 花费 |
---|---|---|
159 | 中国 | 45 |
152 | 中国 | 8 |
159 | 中国 | 21 |
160 | 中国 | 6 |
161 | 中国 | 9 |
162 | 中国 | 93 |
152 | 中国 | 3 |
168 | 德国 | 91 |
169 | 德国 | 101 |
170 | 德国 | 38 |
171 | 德国 | 17 |
154 | 德国 | 11 |
154 | 德国 | 50 |
167 | 德国 | 63 |
168 | 德国 | 1 |
153 | 日本 | 7 |
163 | 日本 | 58 |
164 | 日本 | 44 |
153 | 日本 | 19 |
164 | 日本 | 10 |
165 | 日本 | 15 |
166 | 日本 | 24 |
153 | 日本 | 105 |
我已经尝试了下面的代码,但它没有返回正确的结果。
SELECT customer_id,country,spend FROM (SELECT customer_id,spend,@country_rank := IF(@current_country = country,@country_rank + 1,1)
AS country_rank,@current_country := country
FROM table1
ORDER BY country ASC,spend DESC) ranked_rows
WHERE country_rank<=3;
由于一些客户也是回头客,我想确保考虑的是每位客户的支出总和。
解决方法
您似乎在使用 MySQL。如果您运行的是版本 8 或更高版本,则只需在此处使用 ROW_NUMBER()
:
WITH cte AS (
SELECT *,ROW_NUMBER() OVER (PARTITION BY country ORDER BY spend DESC) rn
FROM table1
)
SELECT customer_id,country,spend
FROM cte
WHERE rn <= 3;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。