如果我有一个名为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。
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