gpt4 book ai didi

sql - 更新 SQL 模式 ONLY_FULL_GROUP_BY 的 GROUP BY 查询

转载 作者:行者123 更新时间:2023-12-03 07:50:30 24 4
gpt4 key购买 nike

我的主机很快从 MySQL 5.7 切换到 8.0.33,因此默认启用 ONLY_FULL_GROUP_BY

由于缺少权限,我现在无法将 ONLY_FULL_GROUP_BY 添加到 SQL 模式以进行测试。因此,当主机更新了 MySQL 版本后,也不可能再将其关闭。

因此,我现在唯一能做的就是调整稍后使用 ONLY_FULL_GROUP_BY 的查询,如果正确完成,它们现在也应该可以工作。

我是一个懒惰的程序员,一直在做这样的事情:

SELECT *
FROM
table
WHERE
...
GROUP BY xyz
ORDER BY abc

如果在 SELECT 查询中使用 GROUP BY,我就不能再使用 *(=所有列),对吗? :-(

示例 1:

SELECT headhunter, COUNT(*) AS amount
FROM table
GROUP BY headhunter

我是否还需要在此处将金额添加到 GROUP BY 中?

示例 2:

SELECT *, departure, DATE_FORMAT(departure,'%d.%m.%y') AS departure2
FROM table
WHERE carnumber1=''
GROUP BY shipid
ORDER BY departure DESC

这里发生了什么?我在这里不能再使用 * 了吗?

我需要删除*并将shipid添加到SELECT,还有departure(departure2也是吗? ) 到 GROUP BY 并 shipid 到 ORDER BY?

此外,我还必须查看我的 PHP 代码,在 while 循环中执行此查询后处理哪些列,并将它们全部添加到 SELECT、GROUP BY 和 ORDER?!?

示例 3:

SELECT customer
FROM table
WHERE carnumber1!=''
GROUP BY customer
ORDER BY customer ASC

这里不需要调整,或者?

示例 4:

SELECT customer
FROM table
WHERE carnumber1!=''
AND preparation>date_sub(NOW(),INTERVAL 6 MONTH)
GROUP BY customer
ORDER BY customer ASC

也不调整?

示例 5:

SELECT customer
FROM table
GROUP BY customer
HAVING MAX(preparation)<=date_sub(NOW(), INTERVAL 6 MONTH)
ORDER BY customer ASC

在 SELECT、GROUP 和 ORDER 中是否需要列准备(因为 HAVING)?

示例 6:

SELECT DATE_FORMAT(delivery,'%M %Y'), COUNT(*) AS amount, SUM(purchase_price) AS summed
FROM table
GROUP BY MONTH(delivery), YEAR(delivery)

只需将 delivery 添加到 SELECT 并将 purchase_price 添加到 GROUP BY?

感谢您的所有提示、查询修复、解释!

最佳答案

以下是我如何修改每个示例的查询:

示例 1:

SELECT headhunter, COUNT(*) AS amount
FROM table
GROUP BY headhunter, amount;

示例 2:

SELECT shipid, departure, DATE_FORMAT(departure,'%d.%m.%y') AS departure2
FROM table
WHERE carnumber1=''
GROUP BY shipid, departure, departure2
ORDER BY shipid, departure DESC;

示例 3:

No adjustment needed as it's already compliant.

示例 4:

No adjustment needed; it's already compliant.

示例 5:

SELECT customer, MAX(preparation) AS max_preparation
FROM table
GROUP BY customer
HAVING max_preparation <= date_sub(NOW(), INTERVAL 6 MONTH)
ORDER BY customer ASC;

示例 6:

SELECT YEAR(delivery), MONTH(delivery), COUNT(*) AS amount, SUM(purchase_price) AS summed
FROM table
GROUP BY YEAR(delivery), MONTH(delivery);

SELECT 子句中的所有列需要成为 GROUP BY 子句的一部分或使用聚合函数(如 COUNT、SUM 或 MAX)。您可以使用 SELECT 子句中声明的别名或在 ORDER BY 子句中使用 SELECT 子句中的列。必须遵循这些准则,才能使您的查询与 ONLY_FULL_GROUP_BY 模式兼容。

关于sql - 更新 SQL 模式 ONLY_FULL_GROUP_BY 的 GROUP BY 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/77271859/

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