如何用SQL查询指定单词对应出现次数最高的前N个文件
SQL语句正确写法说明
你之前的写法存在两个核心问题:
- 匹配多个枚举值时不能用
=操作符直接接值列表,需要改用IN操作符 HAVING关键字仅用于过滤聚合查询的结果,普通行过滤直接用WHERE即可
场景1:所有指定单词的记录混合排序取前15
如果你的需求是把apples、oranges、prunes三个单词的所有匹配记录放在一起按occurrences倒序,取总排名前15的记录,用以下语句:
SELECT `file`, `word`, `occurrences` FROM 替换为你的实际表名 WHERE `word` IN ('apples', 'oranges', 'prunes') ORDER BY `occurrences` DESC LIMIT 15;
场景2:每个指定单词分别取前15条
如果你的需求是每个指定单词都单独取出现次数最高的15个文件,在支持窗口函数的数据库(MySQL 8.0+、PostgreSQL、SQL Server等)中可以用以下语句:
WITH ranked_records AS ( SELECT `file`, `word`, `occurrences`, -- 按单词分组,组内按出现次数倒序排名 ROW_NUMBER() OVER (PARTITION BY `word` ORDER BY `occurrences` DESC) AS rank_val FROM 替换为你的实际表名 WHERE `word` IN ('apples', 'oranges', 'prunes') ) SELECT `file`, `word`, `occurrences` FROM ranked_records WHERE rank_val <= 15 -- 可选:按单词和排名排序,方便查看结果 ORDER BY `word`, rank_val;
性能优化建议
你的表数据量达数百万行,建议创建联合索引提升查询效率:
CREATE INDEX idx_word_occur ON 替换为你的实际表名 (`word`, `occurrences` DESC);
建索引后查询可以直接命中索引,无需全表扫描和额外排序,查询速度会有大幅提升。
内容的提问来源于stack exchange,提问作者bobthebuilder
相关产品推荐
相关产品推荐

