Mysql 当列位于select中但不在组中时,这是如何工作的

Mysql 当列位于select中但不在组中时,这是如何工作的,mysql,sql,group-by,Mysql,Sql,Group By,此列日期\u FORMATdate,%b作为月份存在于select中,但不存在于group by子句中。相反,它有一个不同的列,但仍然有效。这是怎么回事 我的理解是select子句中的列必须位于group by子句中 SELECT DATE_FORMAT(date, "%b") AS month, SUM(total_price) as total FROM cart WHERE date <= NOW() and date >= Date_add(Now(),i

此列日期\u FORMATdate,%b作为月份存在于select中,但不存在于group by子句中。相反,它有一个不同的列,但仍然有效。这是怎么回事

我的理解是select子句中的列必须位于group by子句中

SELECT DATE_FORMAT(date, "%b") AS month, SUM(total_price) as total
FROM cart
WHERE date <= NOW() and date >= Date_add(Now(),interval - 12 month)
GROUP BY DATE_FORMAT(date, "%m-%Y"

标准SQL中不允许您进行查询。在使用默认设置的MySQL的最新版本中也不允许这样做。如果您使用的是旧版本,则可以通过设置拒绝查询

具体的错误其实很清楚:

SELECT列表的表达式1不在GROUP BY子句中,并且包含未聚合列“db_1133225228.cart.date”,该列在功能上不依赖于GROUP BY子句中的列;这与sql\u mode=only\u full\u group\u by不兼容

一般来说,未聚合的SELECT表达式需要位于GROUP BY中。一个例外基本上是当GROUPBY包含主键时;然后可以使用任何列

在MySQL的旧版本中,或者当没有正确设置“仅完整”组时,会发生什么情况?在这种情况下,将从组中选择任意值作为值。该值可能会在不同的查询运行中发生变化,尽管在实践中该值相当稳定

但是,我的建议是只使用_full _group _by来编写与标准和几乎所有其他数据库在这方面一致的查询。

可以提供购物车表示例数据吗?您应该阅读mysql将允许这样做,但您可能无法得到“正确”的结果。