首页 >数据库 >mysql教程 >如何修复子查询中 MySQL 的'无效使用组函数”错误?

如何修复子查询中 MySQL 的'无效使用组函数”错误?

Barbara Streisand
Barbara Streisand原创
2025-01-11 22:38:46860浏览

How to Fix MySQL's

调试 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>

说明:

修改后的查询使用 CatalogpidGROUP BY c2.pid 表进行分组。 然后,HAVING 子句过滤这些组,仅保留供应商 ID (sid) 计数大于或等于 2 的组。这可以正确识别至少有两个供应商的零件。 然后,外部查询从这些过滤组中选择 pid 值。

以上是如何修复子查询中 MySQL 的'无效使用组函数”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn