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

如何用SQL返回无排列重复的1990年后出生DEFCON获胜黑客对?

解决无重复黑客对的SQL方案

嘿,我来帮你搞定这个SQL问题!要生成无排列重复的符合条件的黑客对,核心思路是先筛选出合格的黑客,再通过自连接时的条件限制来避免重复对。

步骤拆解

  1. 先锁定符合条件的黑客
    我们需要先找出同时满足两个条件的黑客:

    • 获得过DEFCON竞赛冠军(关联winners表)
    • 出生于1990年之后(过滤hackers的birthday字段)
      用CTE(公共表表达式)来整理这个合格列表,还能顺便去重(避免同一黑客多次获奖导致重复记录)。
  2. 自连接生成无重复对
    把合格黑客列表自连接,关键是用h1.name < h2.name这个条件——这样每对黑客只会按“名字字典序从小到大”出现一次,绝对不会返回(zix, wix)和(wix, zix)这种重复排列。

完整SQL代码

WITH qualified_hackers AS (
    SELECT h.name
    FROM hackers h
    INNER JOIN winners w 
        ON h.name = w.hacker
    WHERE h.birthday >= '1991-01-01' -- 确保是1990年之后出生(含1991年1月1日)
    GROUP BY h.name -- 去重:同一黑客多次获奖只保留一条记录
)
SELECT 
    h1.name AS hacker_pair_first,
    h2.name AS hacker_pair_second
FROM qualified_hackers h1
INNER JOIN qualified_hackers h2 
    ON h1.name < h2.name;

补充说明

  • 关于生日条件:如果你的birthday字段是DATE类型,用>= '1991-01-01'比> '1990-12-31'更直观,效果完全一致。
  • 如果不用CTE,也可以把qualified_hackers换成子查询,逻辑是一样的。
  • 为什么之前的尝试可能失败?大概率是没在自连接时加h1.name < h2.name的限制,或者用了!=这种会返回正反两对的条件。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:28:37