您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

消除PostgreSQL SELECT语句中的重复行

消除PostgreSQL SELECT语句中的重复行

Postgresql当前不允许模棱两可的GROUP BY语句,其结果取决于表的扫描顺序,使用的计划等。这就是标准说它应该在AFAIK中起作用的方式,但是某些数据库(例如5.7之前的MysqL版本)允许松散的语句。这些查询仅选择出现在SELECT列表中但不在中的元素遇到的第一个GROUP BY

在Postgresql中,您应该使用DISTINCT ON这种查询

您想要编写类似以下内容内容

SELECT DISTINCT ON (anwendung.name) anwendung.name, autor.entwickler
FROM author 
left join anwendung on anwendung.name = autor.anwendung;

(根据后续评论更正了语法)

这有点像MysqL 5.7的ANY_VALUE(...)函数group by,但是反过来-它表示distinct on子句中的值必须是唯一的,并且对于 指定的列,任何值都是可接受的。

除非有ORDER BY,否则没有保证选择哪个值。通常,您应该具有ORDER BY可预测性。

还需要注意的是,使用类似min()或的聚合是max()可行的。尽管确实如此-与使用DISTINCT ON或模棱两可的方法不同GROUPBY,它会导致可靠和可预测的结果-但由于需要额外的排序或聚合,因此会降低性能,并且仅适用于顺序数据类型。

SQLServer 2022/1/1 18:38:16 有369人围观

撰写回答


你尚未登录,登录后可以

和开发者交流问题的细节

关注并接收问题和回答的更新提醒

参与内容的编辑和改进,让解决方法与时俱进

请先登录

推荐问题


联系我
置顶