开发者社区> 问答> 正文

MySQL:无效使用组函数

我正在使用MySQL。这是我的架构:

供应商(sid:整数,sname:字符串,地址字符串)

零件(pid:整数,pname:字符串,color:字符串)

目录(sid:整数,pid:整数,成本:实数)

(主键以粗体显示)

我正在尝试编写查询以选择至少两个供应商制造的所有零件:

-- Find the pids of parts supplied by at least two different suppliers. SELECT c1.pid -- select the pid FROM Catalog AS c1 -- from the Catalog table WHERE c1.pid IN ( -- where that pid is in the set: SELECT c2.pid -- of pids FROM Catalog AS c2 -- from catalog WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- where there are at least two corresponding sids ); 首先,我什至会以正确的方式这样做吗?

其次,我得到这个错误:

1111-无效使用组功能

我究竟做错了什么?

展开
收起
保持可爱mmm 2020-05-11 15:58:37 464 0
1 条回答
写回答
取消 提交回答
  • 您需要使用HAVING,不WHERE。

    区别在于:该WHERE子句过滤MySQL选择的行。然后, MySQL将这些行分组在一起,并为您的COUNT函数汇总数字。

    HAVING就像是WHERE,只有它发生后,该COUNT值已经计算出来,所以你希望它会工作。将子查询重写为:

    ( -- where that pid is in the set: SELECT c2.pid -- of pids FROM Catalog AS c2 -- from catalog WHERE c2.pid = c1.pid HAVING COUNT(c2.sid) >= 2)来源:stack overflow

    2020-05-11 15:58:47
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
搭建电商项目架构连接MySQL 立即下载
搭建4层电商项目架构,实战连接MySQL 立即下载
PolarDB MySQL引擎重磅功能及产品能力盛大发布 立即下载

相关镜像