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

如何编写含多个COUNT列的SQL查询?解决Error 1242子查询多行报错

解决SQL查询报错与多COUNT列实现问题

首先来说你遇到的报错原因:你的子查询select distinct patient.Gender from patient会返回所有不同的性别值(比如'M'、'F'这类),但=运算符只能匹配单个值,数据库没法确定要和哪一个性别值做匹配,所以就抛出了Error Code: 1242. Subquery returns more than 1 row这个错误。

其实你要统计性别对应的数量,根本不需要那个子查询,我们可以用更简单的写法来实现需求,分两种常用场景:

场景1:按性别分组,每行显示一个性别及其数量

这是最直观的分组统计写法,直接用GROUP BY按性别分组即可:

SELECT 
    patient.Gender,
    COUNT(*) AS gender_count
FROM patient
GROUP BY patient.Gender;

执行后会返回类似这样的结果:

Gendergender_count
M45
F52

场景2:多COUNT列,同一行显示不同性别的数量

如果希望把不同性别的统计结果放在同一行的不同列(比如男性数量、女性数量各占一列),可以用条件聚合的方式,在COUNT里结合CASE语句实现:

SELECT 
    COUNT(CASE WHEN Gender = 'M' THEN 1 END) AS male_count,
    COUNT(CASE WHEN Gender = 'F' THEN 1 END) AS female_count,
    COUNT(*) AS total_patients -- 可选,用来统计总患者数
FROM patient;

这里的逻辑是:当性别匹配时,CASE返回1,否则返回NULL,而COUNT函数会自动忽略NULL值,从而精准统计对应性别的数量。执行后结果类似:

male_countfemale_counttotal_patients
455297

如果你的性别字段还有其他可能的值(比如'Unknown'),只需要添加对应的CASE分支即可:

SELECT 
    COUNT(CASE WHEN Gender = 'M' THEN 1 END) AS male_count,
    COUNT(CASE WHEN Gender = 'F' THEN 1 END) AS female_count,
    COUNT(CASE WHEN Gender = 'Unknown' THEN 1 END) AS unknown_gender_count,
    COUNT(*) AS total_patients
FROM patient;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:33