提问人:JDubs 提问时间:9/16/2023 最后编辑:ShadowJDubs 更新时间:9/16/2023 访问量:39
having 子句中的 Unknow 列 - mysql
Unknow column in having clause - mysql
问:
我知道这已经得到了回答,但由于我缺乏mysql的经验,我无法从回复中破译解决方案,所以请原谅我再次问同样的问题。我正在将 ms-access 查询转换为 mysql,这对我来说是一个伤害的世界......我遇到的问题是我得到了“未知列。在“having clause”中。Big Ditch
Begindate
我试过了这个:
SELECT Sum(datediff(`Big Ditch`.`EndDate`,`Big Ditch`.`BeginDate`)*`Big Ditch`.`Amount`) AS `BigDitchTotal`, extract(year from `Big Ditch`.`BeginDate`) AS Expr1
FROM `Big Ditch`
GROUP BY (extract(year from `Big Ditch`.`BeginDate`))
HAVING (extract(year from `Big Ditch`.`BeginDate`) = current_date());
答:
0赞
Barmar
9/16/2023
#1
在执行聚合之前按年份筛选行,以减少必须处理的数据量。
MySQL 有一个内置函数,您可以使用它来代替 .YEAR()
EXTRACT()
您不需要,因为您只显示一年的结果,这是您在条件中选择的结果。GROUP BY
WHERE
SELECT Sum(datediff(`Big Ditch`.`EndDate`,`Big Ditch`.`BeginDate`)*`Big Ditch`.`Amount`) AS `BigDitchTotal`, MAX(YEAR(`Big Ditch`.`BeginDate`)) AS Expr1
FROM `Big Ditch`
WHERE YEAR(`Big Ditch`.`BeginDate`) = YEAR(current_date())
评论
0赞
JDubs
9/16/2023
我会竖起你的回答,但我得到一个错误:错误代码:1140。在没有 GROUP BY 的聚合查询中,SELECT 列表的表达式 #2 包含非聚合列 'gmwua_alpha。大沟.BeginDate';这与 sql_mode=only_full_group_by 不兼容
0赞
JDubs
9/16/2023
您之前的回复已成功。
0赞
Barmar
9/16/2023
在它周围添加一个聚合函数可以修复它,我已经更新了答案。
0赞
JDubs
9/16/2023
好!再次感谢Barmar!
0赞
Jonas Metzler
9/16/2023
这种情况可能会使此查询变得非常慢。把它写成可能更快YEAR(BeginDate) = YEAR(current_date())
BeginDate >= '2023-01-01' AND BeginDate <= '2023-12-31'
评论
HAVING
聚合后会检查条件,因此测试原始表中的列没有意义。你应该为此使用。WHERE
WHERE
GROUP BY