当前位置: 首页 > 面试题库 >

MySQL:无效使用组函数

钱承允
2023-03-14
问题内容

我正在使用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-无效使用组功能

我究竟做错了什么?


问题答案:

您需要使用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)


 类似资料:
  • 问题内容: 我正在使用以下查询,以尝试从每个项目中检索最大数量的幻灯片的总数(总和),但是我收到以下错误(#1111-组功能的无效使用)。这是查询: 如果删除SUM(),则它可以工作,但是,对于所有项目/幻灯片,我都无法获得准确的总数。 预先感谢您的所有答复。 问题答案:

  • 问题内容: 给出以下代码: 我的IDE没有给我任何错误。也就是说,直到我尝试构建项目并运行它。当我这样做时,它给了我一个看起来像这样的编译器错误: 现在,我得到了错误消息,如果foo()是静态的,则不会发生这种情况。没错,这仅在foo()是实例方法的情况下才会发生。并且仅当LocalFoo是实例方法中的本地类时才发生,并且仅当使用构造函数引用时(即从不使用常规方法引用)才发生。 更重要的是,如果我

  • 问题内容: 给定以下表人员(ec,名称,代码,dob,薪水) 问:列出收入高于平均工资的工作人员 我的儿子 这有什么问题? 问题答案: 除非在子句或选择列表中包含的子查询中,否则聚合可能不会出现在子句中,并且正在聚合的列是外部引用。 使用子句示例: 使用子句示例: 子句指定组或集合的搜索条件。只能与该语句一起使用。通常在子句中使用。当不使用时,就像一个条款。

  • 问题内容: 我正在尝试使用数组查询MySQL数据库,但是遇到了麻烦! 我有一个名为客户的表,我希望能够从“扇区”列等于$ sectorlink的所有行中选择“名称”。 然后,我想将所有名称放入数组,以便执行下一个查询:从另一个表中选择所有行,这些表的“ client”列等于从第一个查询返回的名称之一。我做错了,因为它返回了致命的SQL错误。我对所有变量感到困惑! $ sectorlink和$ co

  • 问题内容: 我已经开始了一个项目,其中我在前端使用React JS,在后端使用node js。我使用webpack捆绑了JS文件。我将babel与其他必要的东西一起使用。当我在react类中使用箭头函数时,它会给出语法错误,例如: 模块构建失败:SyntaxError:意外令牌 但是我可以在节点中使用Arrow函数,没有任何问题。 这是我的webpack配置文件: 我的React文件: 如何解决这

  • 我们在生产系统中使用Flyway进行数据库迁移。 最初它被开发为在MySQL 5.5上运行,后来我们的一些客户升级到5.6,然后升级到5.7。 与5.6相比,MySQL 5.7中有一个变化-定义为NOT NULL的datetime字段必须在SQL脚本中具有5.7的默认值,而在5.6中则允许没有默认值。 因此,我们在v11中有一个迁移做到了这一点,但在v2中有一个迁移使用了(现在在5.7中)非法语法