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

SQL聚合查询子查询返回两行致计数报错的解决方法

问题背景

我有如下数据表:
表定义

需求为编写SQL语句,统计m1市政区参与投票的选民总人数,统计规则为以idcard作为选民唯一标识计数。已知m1市政区下辖1、2两个选区,两个选区内的选民互不重叠。
初始编写的SQL代码如下:

SELECT COUNT(idcard) FROM Census
WHERE ndistrict = (SELECT ndistrict FROM Polling WHERE name='m1')  

运行异常原因:内层子查询会返回2行选区数据,=运算符仅支持匹配单个标量值,无法匹配多行结果集,导致查询执行失败,需要对语句进行修正。

修正方法

核心问题是单行匹配运算符=无法处理子查询返回的多行结果,有两种标准修正方案:

  • 方案1:使用IN运算符替换=
    IN运算符专门用于匹配指定值集合内的任意元素,可直接兼容子查询返回的多行结果,修改后语句如下:

    SELECT COUNT(DISTINCT idcard) FROM Census
    WHERE ndistrict IN (SELECT ndistrict FROM Polling WHERE name='m1')
    

    补充说明:若确认Census表中每个idcard仅对应一条记录、不存在重复数据,可去掉DISTINCT直接写COUNT(idcard);加上DISTINCT是更严谨的防御性写法,可避免重复数据导致计数虚高。

  • 方案2:使用内连接关联两表查询
    通过选区编号字段关联选民表和选区表,直接筛选m1市政区对应的选民记录,语义更直观,也方便后续扩展查询其他市政区相关字段,语句如下:

    SELECT COUNT(DISTINCT c.idcard)
    FROM Census c
    JOIN Polling p ON c.ndistrict = p.ndistrict
    WHERE p.name = 'm1'
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 08:31:00