我正试图为这样的表格返回每个国家的前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 |
您似乎在使用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;