P粉1558329412023-08-24 13:38:21
如果您设置禁用 ONLY_FULL_GROUP_BY
服务器模式(默认情况下),您的查询将在 MYSQL
中运行。但在本例中,您使用的是不同的 RDBMS。因此,为了使您的查询正常工作,请将所有非聚合列添加到您的GROUP BY
子句中,例如
SELECT col1, col2, SUM(col3) totalSUM FROM tableName GROUP BY col1, col2
非聚合列意味着该列不会传递到聚合函数,例如 SUM
、MAX
、COUNT
等。
P粉0900872282023-08-24 10:30:14
假设我有下表T
:
a b -------- 1 abc 1 def 1 ghi 2 jkl 2 mno 2 pqr
我执行以下查询:
SELECT a, b FROM T GROUP BY a
输出应有两行,一行为 a=1
,第二行为 a=2
。
但是 b 的值应该在这两行中显示什么呢?每种情况都有三种可能性,查询中没有任何内容明确说明为每组中的 b 选择哪个值。意思很模糊。
这演示了单值规则,该规则禁止在运行 GROUP BY 查询时获得未定义的结果,并且在选择列表中包含不属于分组的任何列标准,也不会出现在聚合函数(SUM、MIN、MAX 等)中。
修复它可能如下所示:
SELECT a, MAX(b) AS x FROM T GROUP BY a
现在很明显您想要以下结果:
a x -------- 1 ghi 2 pqr