调试 MySQL 的“无效使用组函数”错误
问题:
旨在识别至少两个供应商提供的零件的查询导致“无效使用组功能”错误:
<code class="language-sql">SELECT c1.pid -- Select part ID (pid) FROM Catalog AS c1 -- From the Catalog table WHERE c1.pid IN ( -- Where pid is in the set: SELECT c2.pid -- Of pids FROM Catalog AS c2 -- From the Catalog table WHERE c2.pid = c1.pid AND COUNT(c2.sid) >= 2 -- Incorrect: COUNT in WHERE clause );</code>
问题:
错误源于COUNT()
函数放置不当。 WHERE
子句在 分组之前 过滤各个行,使聚合函数 COUNT()
在此上下文中无效。
解决方案:
正确的方法是使用 HAVING
子句,该子句在 分组和聚合之后过滤 :
<code class="language-sql">SELECT c1.pid FROM Catalog AS c1 WHERE c1.pid IN ( SELECT c2.pid FROM Catalog AS c2 GROUP BY c2.pid HAVING COUNT(c2.sid) >= 2 );</code>
说明:
修改后的查询使用 Catalog
按 pid
对 GROUP BY c2.pid
表进行分组。 然后,HAVING
子句过滤这些组,仅保留供应商 ID (sid
) 计数大于或等于 2 的组。这可以正确识别至少有两个供应商的零件。 然后,外部查询从这些过滤组中选择 pid
值。
以上是如何修复子查询中 MySQL 的'无效使用组函数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!