You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 08:36:04