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

SQL count子查询报"more than one row returned by a subquery used as an expression"问题咨询

问题原因与修复方案

报错核心原因

两个子查询的关联逻辑存在本质差异:

  • 可正常运行的number_of_real_users属于相关子查询:子查询内没有重新定义公司表别名cc,WHERE条件中cc.id = u.company_id引用的是外层主查询的当前行公司ID,因此每对应主查询的一行,子查询只会返回单个计数值,符合单值表达式的要求。
  • 报错的number_of_full_users属于独立子查询:你在子查询内部重新声明了FROM companies_company cc,该别名和外层主查询的公司表完全无关联,再加上子查询自身携带GROUP BY cc.id逻辑,会一次性返回所有未停用公司的计数结果(符合条件的公司有多少个就返回多少行),自然不符合主查询字段位置要求的单值返回规则。
    此外子查询中的email is null未指定所属表,还存在字段歧义隐患。

修复代码

删掉子查询内部重复的公司表引用,直接关联外层主查询的公司ID即可,修改后的完整主查询如下:

SELECT cc.id , cc.name, 
    (SELECT count(*) from auth_user u where cc.id = u.company_id and u.email is null) as number_of_real_users,   
    (SELECT count(u.id) 
     FROM auth_user u 
     FULL JOIN auth_user_groups ug ON ug.user_id= u.id 
     FULL JOIN auth_group g ON g.id = ug.group_id  
     WHERE u.company_id = cc.id AND u.email is null) as number_of_full_users,
    ss.user_permissions_enabled, 
    cc.company_type
FROM companies_company cc
FULL JOIN subscriptions_subscription ss on ss.company_id = cc.id
WHERE cc.deactivated is null
GROUP BY cc.id, cc.name, ss.user_permissions_enabled, cc.company_type
ORDER BY cc.id

注:原主查询cc.company_type后多了一个多余的逗号,同时GROUP BY遗漏了cc.company_type字段,上述代码也同步做了修正。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 15:54:04