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

SQL查询国籍仅出现一次的艺术家姓名的实现方法

SQL需求说明

现有一张名为artist的示例表,存储艺术家姓名与对应国籍信息,表结构与样例数据如下:

name                    | nationality
 --------------------------------------
 Nura Nal                | Naltorian    
 Susan Storm             | American    
 Tyson Gilford           | American    
 Kendra Sanders          | American    
 Natasha Romanoff        | Russian    
 T'Challa                | Wakandan    
 Matthew Michael Murdoch | American    
 Karen Beecher-Duncan    | American    
 Kathy Kane              | American    
 Kimberley Ann Hart      | American   
 Reed Richards           | American    
 Barbara Gordon          | American   
 Ethan Morris            | Droolian    
 Barry Allen             | American

需要实现的查询逻辑:返回国籍在表中仅出现一次的艺术家姓名。以上述样例数据为例,需排除所有国籍为American的记录,仅返回其余国籍对应的艺术家姓名。

实现方案

通用兼容写法(支持所有SQL版本)

SELECT name
FROM artist
WHERE nationality IN (
    SELECT nationality
    FROM artist
    GROUP BY nationality
    HAVING COUNT(*) = 1
);

逻辑说明:

  • 内层子查询按国籍字段分组,通过HAVING子句筛选出总出现次数为1的国籍集合
  • 外层查询匹配国籍属于该集合的艺术家,返回对应的姓名字段

针对上述样例数据,查询返回结果为:

  • Nura Nal
  • Natasha Romanoff
  • T'Challa
  • Ethan Morris

窗口函数写法(支持MySQL8.0+、PostgreSQL、SQL Server等主流新版本数据库)

大表数据场景下该写法性能更优:

SELECT name
FROM (
    SELECT
        name,
        COUNT(*) OVER (PARTITION BY nationality) AS nationality_count
    FROM artist
) AS stat
WHERE nationality_count = 1;

逻辑说明:

  • 内层通过窗口函数,在不改变原表行粒度的前提下,计算每个国籍对应的总记录数
  • 外层直接筛选出国籍计数为1的行,提取艺术家姓名即可,返回结果和通用写法完全一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 14:51:12