这是 SQL-Server 的一个可能的解决方案:
SELECT bstate, ccat, cnt FROM (
SELECT b.state bstate, c.category ccat, count(*) cnt,
ROW_NUMBER() OVER(PARTITION BY b.state ORDER BY count(*) DESC) rn
FROM business b INNER JOIN category c ON b.id=c.business_id
GROUP BY c.category, b.state
) tbl
WHERE rn = 1
ORDER BY bstate, cnt desc
窗口函数
ROW_NUMBER()
为每个记录分配一个唯一的排名,应用此任务的PARTITION
块的ORDER
和OVER(...)
规范。
外部
SELECT
只需要过滤带有 rn=1
的记录即可排除所有其他记录。