【问题标题】:MySQL error with WHERE clause and GROUP BY clause带有 WHERE 子句和 GROUP BY 子句的 MySQL 错误
【发布时间】:2018-12-11 18:11:14
【问题描述】:

enter image description here

我正在尝试编写一个查询,以检索上表中订单超过 1300 美元的所有销售人员的姓名。 (每个销售人员只有一个 ID。)

这是我的尝试:

SELECT name, sum(amount)

FROM salesperson

JOIN orders

ON salesperson.ID = orders.salesperson_id

WHERE sum(amount) > 1300 

GROUP BY name; 

但是显示错误:ERROR 1111 (HY000): Invalid use of group function.

当我删除 where 子句时,它可以正常工作并返回以下内容:

enter image description here

这与我想要的非常相似,只是没有针对 sum(amount) 小于 1300 的过滤器。

我在 where 子句中做错了什么,我该如何解决?

【问题讨论】:

  • 请阅读HAVING(聚合后过滤)。
  • 没有在哪里... HAVING sum(amount)>1300 在 GROUP BY 之后。问题是操作顺序。 where 子句在 select 之前执行;所以金额还没有确定。 have 子句在 select 之后执行;这意味着总和是已知的,可以用作过滤器。
  • 如果您开始使用像 sqlfiddle.com 这样的网站来发布这些问题,我们很容易为您提供帮助。这对您来说也是一个非常好的工具,因为我认为是 sql 的新手。请不要在本网站的屏幕截图中粘贴文本(例如控制台输出)。
  • 请阅读Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? - 总结是这不是解决志愿者的理想方式,并且可能会适得其反。请不要将此添加到您的问题中。
  • 嗨。请use text, not images/links, for text (including code, tables & ERDs)。使用链接/图像仅是为了方便补充文本和/或无法在文本中给出的内容。永远不要给出没有图例/键的图表。如果您有代表,请使用编辑功能内联,而不是链接 - 使您的帖子独立。

标签: mysql join group-by where logical-operators


【解决方案1】:

Aggregate 不能出现在WHERE 子句中,但您可以通过以下方式使用HAVING

SELECT name, sum(amount)

FROM salesperson

JOIN orders

ON salesperson.ID = orders.salesperson_id

GROUP BY name

Having sum(amount) > 1300; 

【讨论】:

  • 您也可以参考这篇 Stack Overflow 帖子 (stackoverflow.com/questions/28171977/…)
  • 感谢瑞恩的帮助。我参加的在线课程没有涉及“拥有”,所以我不知道。现在我知道了,因为你的帮助。谢谢!
猜你喜欢
  • 2013-01-27
  • 2021-06-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-12-14
  • 2014-10-19
相关资源
最近更新 更多