栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

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

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

在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;


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/387942.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号