【发布时间】:2018-12-11 18:11:14
【问题描述】:
我正在尝试编写一个查询,以检索上表中订单超过 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 子句时,它可以正常工作并返回以下内容:
这与我想要的非常相似,只是没有针对 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