在mySQL和postgreSQL中使用group by子句,为什么在postgreSQL中出错?

在mySQL和postgreSQL中使用group by子句,为什么在postgreSQL中出错?,第1张

在mySQL和postgreSQL中使用group by子句,为什么在postgreSQL中出错?

您需要使用AGGREGATE
FUNCTION

聚合函数根据一组输入值计算单个结果。

SELECt col2, MIN(col3) AS col3, MIN(col1) AS col1FROM the_table GROUP BY col2;

db <>
fiddle演示


MySQL对GROUP BY的处理

在标准SQL中,包含GROUP BY子句的查询不能引用选择列表中未在GROUP BY子句中命名的未聚合列

和:

MySQL扩展了GROUP BY的使用,以便选择列表可以引用未在GROUP
BY子句中命名的非聚合列。这意味着前面的查询在MySQL中是合法的。您可以使用此功能来避免不必要的列排序和分组,从而获得更好的性能。但是,这主要在每个未聚合列中未在GROUP
BY中命名的所有值对于每个组都相同时才有用。 服务器可以从每个组中自由选择任何值,因此,除非它们相同,否则选择的值是不确定的

因此,对于没有显式聚合函数的MySQL版本,您可能会得到不确定的值。我强烈建议使用特定的聚合函数。


编辑:

从MySQL处理GROUP BY:

SQL92和更早版本不允许查询,其中选择列表,HAVINg条件或ORDER BY列表引用未在GROUP BY子句中命名的非聚合列。

如果SQL99和更高版本 在功能上依赖于GROUP BY列 ,则按可选功能T301允许此类非聚合
如果name和custid之间存在这种关系,则查询合法。举例来说,如果客户是客户的主键,那就是这种情况。

例:

SELECt o.custid, c.name, MAX(o.payment)FROM orders AS oJOIN customers AS c  ON o.custid = c.custidGROUP BY o.custid;


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/4961944.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-13
下一篇 2022-11-13

发表评论

登录后才能评论

评论列表(0条)

保存