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

按编程语言筛选认知得分前2名求职者的SQL实现(禁用ROW_NUMBER())

解决方案:不使用ROW_NUMBER()筛选各编程语言认知得分前2的求职者

方法一:关联子查询统计高分数量

SELECT 
    a.name,
    a.[cognitive score],
    a.[programming language]
FROM applicants a
WHERE (
    SELECT COUNT(DISTINCT b.[cognitive score])
    FROM applicants b
    WHERE b.[programming language] = a.[programming language]
      AND b.[cognitive score] > a.[cognitive score]
) < 2
ORDER BY a.[programming language], a.[cognitive score] DESC;
  • 逻辑说明:子查询会统计当前求职者所属编程语言分组中,得分严格高于当前者的不同分数个数。如果这个个数小于2,说明当前求职者的得分在组内排前2(包含并列高分的情况)。
  • 若不需要保留并列高分(只取前2个不同的分数层级),可以去掉DISTINCT,此时统计的是高分人数而非不同分数的数量。

方法二:自连接分组统计

SELECT DISTINCT
    a.name,
    a.[cognitive score],
    a.[programming language]
FROM applicants a
LEFT JOIN applicants b
    ON a.[programming language] = b.[programming language]
    AND b.[cognitive score] > a.[cognitive score]
GROUP BY a.id, a.name, a.[cognitive score], a.[programming language]
HAVING COUNT(b.id) < 2
ORDER BY a.[programming language], a.[cognitive score] DESC;
  • 逻辑说明:通过自连接匹配同组内得分更高的求职者,然后分组统计每个求职者对应的高分人数。当高分人数小于2时,该求职者属于组内前2名。
  • 使用DISTINCT是为了避免自连接产生的重复行,也可以将COUNT(b.id)替换为COUNT(DISTINCT b.id)来达到同样效果。

内容的提问来源于stack exchange,提问作者swede

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:40:29