小编典典

将SQL查询限制为每组仅前两个计数

sql

如果我有一个名为FAVORITE_FLAVOR的数据库表,其中每一行都有用户喜欢的冰淇淋口味。

User ID | Flavor      | State
1       | Chocolate   | CA
2       | Vanilla     | ND
3       |   Chocolate | CA
4       | Rocky Road  | CA
5       | vanilla     | CA
6       | Vanilla     | CA
7       | Vanilla     | CA

现在,如果我想查询每个州的两种最流行的样式(规范化大小写和空格),我可以查询:

SELECT state, INITCAP(TRIM(flavor)), count(INITCAP(TRIM(flavor))) AS total
FROM favorite_flavor GROUP BY state, INITCAP(TRIM(flavor))
ORDER BY state ASC, total DESC;

哪个返回:

CA | Vanilla    | 3
CA | Chocolate  | 2
CA | Rocky Road | 1
ND | Vanilla    | 1

现在,我只想知道每个州的前2种口味。如何限制查询,以便不再列出Rocky Road。


阅读 233

收藏
2021-04-14

共1个答案

小编典典

SELECT
State,
flv,
total
FROM (SELECT
ROW_NUMBER() OVER ( PARTITION BY state ORDER BY count(INITCAP(TRIM(flavor))) DESC ) RowNumber,
State,
INITCAP(TRIM(flavor)) flv,
count(INITCAP(TRIM(flavor))) total
FROM favorite_flavor
GROUP BY state, INITCAP(TRIM(flavor))
) dt
WHERE RowNumber <= 2
ORDER BY state ASC, total DESC

2021-04-14