gpt4 book ai didi

mysql - 关于having 子句和where 子句的问题

转载 作者:行者123 更新时间:2023-11-29 06:48:00 24 4
gpt4 key购买 nike

我有一个非常简单的问题。我正在使用 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/

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