作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个非常简单的问题。我正在使用 Mysql bench,并且我有如下数据:
dateordered_new orderstatus orders
2016-06-23 23:19:23 returned 8
2016-06-01 23:19:23 completed 12
2016-06-22 23:19:23 returned 9
2016-06-04 23:19:23 completed 27
...etc...
问题很简单,我想显示每个月退回的订单数量。
这是我的查询:
select month(dateorderednew) as Month, sum(orders) as return_orders
from table_a
group by month
having orderstatus='returned;
考虑到 where 子句和having 子句之间的差异,我的语法应该有效。然而,系统告诉我“错误代码:1054。'having Clause'中的未知列'orderstatus'”并且它已连接。
但是,当我像这样修改查询时:
select month(dateorderednew) as Month, sum(orders) as return_orders
from table_a
where orderstatus='returned
group by month;
它成功了。
所以,这真的很令人困惑。我认为having子句应该跟在group by语句后面。但我无法回答为什么会发生这种情况?
你们对此有什么想法吗?
最佳答案
根据您的情况,您应该使用 where
子句:
select month(dateorderednew) as Month, sum(orders) as return_orders
from table_a
where orderstatus='returned'
group by month
因为您希望在聚合之前过滤表中的行。
当您想要过滤聚合值时,仅使用having
子句,例如
select month(dateorderednew) as Month, sum(orders) as return_orders
from table_a
group by month
having sum(orders) > 10
但是,mysql 很灵活,允许您对非聚合值使用having
。
关于mysql - 关于having 子句和where 子句的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48616049/
我是一名优秀的程序员,十分优秀!