首页 >数据库 >mysql教程 >如何正确使用MySQL子查询中的GROUP函数查找多个供应商供应的零件?

如何正确使用MySQL子查询中的GROUP函数查找多个供应商供应的零件?

DDD
DDD原创
2025-01-11 22:46:451019浏览

How to Correctly Use GROUP Functions in MySQL Subqueries to Find Parts Supplied by Multiple Suppliers?

排除 MySQL 的“无效使用组函数”错误

本指南解决了查询涉及多个供应商和零件的数据时经常遇到的常见 MySQL 错误“无效使用组函数”。 目标是找到至少两个不同供应商提供的零件。

核心问题在于在子查询中处理 WHERE 等聚合函数时误用 COUNT() 子句。 WHERE 分组之前过滤单个行,而 HAVING 聚合之后过滤行组。 由于我们需要根据每个零件的数量供应商(聚合值)进行过滤,因此至关重要。 HAVING正确的方法涉及使用子查询来识别满足条件的零件(至少两个供应商),然后使用

从主查询中选择这些零件。 关键的变化是在子查询中将

替换为 INWHERE HAVING更正后的子查询结构如下所示:

此修订后的子查询使用
<code class="language-sql">(
    SELECT c2.pid
    FROM Catalog AS c2
    GROUP BY c2.pid
    HAVING COUNT(DISTINCT c2.sid) >= 2
)</code>
按零件 ID 对行进行分组,并使用

过滤这些组,仅保留具有两个或多个不同供应商 ID 的组。 GROUP BY c2.pid 关键字确保每个供应商仅被计数一次,即使他们多次供应同一部件。HAVING COUNT(DISTINCT c2.sid) >= 2 DISTINCT简而言之,请记住在子查询中将

与聚合函数一起使用,以根据 MySQL 中的聚合值正确过滤行组。 这种区别是解决“无效使用组函数”错误并准确检索所需数据的关键。

以上是如何正确使用MySQL子查询中的GROUP函数查找多个供应商供应的零件?的详细内容。更多信息请关注PHP中文网其他相关文章!

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