gpt4 book ai didi

mysql - 在 SQL 查询中封装聚合函数

转载 作者:行者123 更新时间:2023-11-29 07:57:26 25 4
gpt4 key购买 nike

我有 2 个名为“订单”和“销售人员”的表,如下所示:

databse tables

并且我想检索上表中拥有超过 1 个订单的所有销售人员的姓名

然后触发以下查询会显示错误:

SELECT Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id
HAVING COUNT( salesperson_id ) >1

错误是:

列“名称”在选择列表中无效,因为它是 不包含在聚合函数中或 GROUP BY 子句。

从错误并在Google上搜索它,我可以理解该错误是因为Name列必须是group by语句或聚合函数的一部分。

我还试图理解为什么所选列必须位于聚合函数的 group by 子句或艺术中?但没理解清楚。

那么,如何修复这个错误呢?

最佳答案

SELECT max(Name) as Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID
GROUP BY salesperson_id
HAVING COUNT( salesperson_id ) >1

基本思想是,不在 group by 子句中的列现在需要位于聚合函数中,因为每个 salesperson_id min 或 max 的名称可能相同,没有真正的区别(结果是一样的)

示例

查看您的数据,现在有 3 个 Dan(7) 条目,当创建连接时,行 Dan(名称)将乘以 3(对于每个数字 1 Dan),然后服务器现在不会巫婆“Dan” "向服务器选择 3 行的 cos,即使它们在语义上是相同的

也可以尝试一下,以便您了解我在说什么:

SELECT Orders.Number,  Salesperson.Name
FROM Orders, Salesperson
WHERE Orders.salesperson_id = Salesperson.ID

就查询而言,INNER JOIN 是一个更好的解决方案,因为它有点像这个简单查询的标准,这并不重要,但在某些情况下,INNER JOIN 可能会产生更好的结果,但据我所知,这更多的是这是一个遗留问题,因为现在服务器应该几乎产生相同的执行计划。

为了代码清晰,我会坚持使用 INNER JOIN

关于mysql - 在 SQL 查询中封装聚合函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24742692/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com