gpt4 book ai didi

mysql - 如何在不设置sql模式的情况下在mysql中使用group by进行聚合?

转载 作者:行者123 更新时间:2023-11-29 10:54:55 25 4
gpt4 key购买 nike

这个查询得到了我想要的输出。为了运行它,我必须运行

SET sql_mode = '';

因为否则我会收到错误:

SELECT 列表不在 GROUP BY 子句中,并且包含非聚合列“knownLoss.t1.loss”,该列在功能上不依赖于 GROUP BY 子句中的列;这与 sql_mode=only_full_group_by 不兼容

SELECT 
t1.klDate AS LDate
, t1.Category
, t1.reason AS Reason
, sum(t1.loss) AS Loss
, round(t1.loss / t2.loss,2) AS Percentage
FROM
deptkl t1
JOIN (
SELECT
Store
, sum(loss) AS loss
FROM
deptkl
WHERE
klDate >= date_sub(SUBDATE(curdate(), WEEKDAY(curdate())), interval 7 day)
AND
klDate < SUBDATE(curdate(), WEEKDAY(curdate()))
AND
Store = 19
AND
Department = 80
) t2 ON t1.Store = t2.Store

WHERE
klDate >= date_sub(SUBDATE(curdate(), WEEKDAY(curdate())), interval 7 day)
AND
klDate < SUBDATE(curdate(), WEEKDAY(curdate()))
AND
t1.Store = 19
AND
Department = 80
GROUP BY
klDate
, Category
, reason

当我将其放入 Jasper Studio 的数据集和查询对话框中时,我收到相同的错误,并且无法使用 SET sql_mode = '';命令。有什么想法吗?是否有一种方法可以在不使用 SET sql_mode = ''; 的情况下实现此目的?

最佳答案

我猜错误来自于您选择的这一行:

round(t1.loss / t2.loss,2) AS Percentage

由于您的GROUP BY子句不包含此列,因此有点像掷硬币,t1.losst2.loss值将使用。在某些情况下,根据您的标准,这些值恰好总是相同的,因此无论如何您都会得到正确的结果,但数据库仍然会提示,因为它被要求为这些列返回一些任意的结果。处理这个问题的一种方法是简单地将聚合函数应用于有问题的列,如下所示:

round(min(t1.loss) / min(t2.loss),2) AS Percentage

或者...

round(avg(t1.loss) / avg(t2.loss),2) AS Percentage

关于mysql - 如何在不设置sql模式的情况下在mysql中使用group by进行聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43165216/

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