如何使用SELECT查询选取数据表列中频次第二高的重复值
查询countries表中出现频次排名第二的重复国家值
以下是可直接使用的SQL实现,默认存储国家信息的列名为country,如果你的实际列名不同,替换语句中对应的列名即可:
- 适用于MySQL、PostgreSQL、SQLite等支持LIMIT语法的数据库:
-- 统计重复国家的出现频次,取排名第二的结果 SELECT country, COUNT(*) AS repeat_count FROM countries GROUP BY country HAVING COUNT(*) > 1 -- 过滤掉仅出现1次的非重复国家 ORDER BY repeat_count DESC LIMIT 1 OFFSET 1; -- 跳过排名第1的结果,取1条即为第2名
- 通用写法(支持所有含窗口函数的数据库,包括SQL Server、Oracle、MySQL8.0+等,可正确处理并列排名场景):
WITH country_freq_rank AS ( SELECT country, COUNT(*) AS repeat_count, DENSE_RANK() OVER (ORDER BY COUNT(*) DESC) AS freq_rank FROM countries GROUP BY country HAVING COUNT(*) > 1 ) SELECT country, repeat_count FROM country_freq_rank WHERE freq_rank = 2;
注意:推荐优先使用窗口函数的写法,当存在多个国家出现频次并列第一的场景时,
DENSE_RANK()不会出现排名断层,可以准确返回频次第二梯队的所有国家,不会漏算结果。
内容的提问来源于stack exchange,提问作者user8905822
相关产品推荐
相关产品推荐

