一般我们针对排重有两种快速的方法。一种是 DISTINCT,一种是 GROUP BY。但是 GROUP BY 分组之后,要配合聚合函数使用,比如:SUM、count、avg、max、min 等。
如果在 SELECT中 的列,没有在 GROUP BY 中出现,那么这个 SQL 是不合法的,因为列不在 GROUP BY 从句中,也就是说查出来的列必须在 group by 后面出现否则就会报错,或者这个字段出现在聚合函数里面。
给予这个限制,很多网友都喜欢使用 DISTINCT,而最近有同事在使用 DISTINCT 报了错,于是抛给我,在这里我总结一下,分享给大家!
SELECT DISTINCT ON expressions must match initial ORDER BY expressions
根据这个错误,我们查询官方文档得知:
DISTINCT ON ( expression [, …] ) keeps only the first row of each set of rows where the given expressions evaluate to equal. […]。 Note that the “first row” of each set is unpredictable unless ORDER BY is used to ensure that the desired row appears first. […]。 The DISTINCT ON expression(s) must match the leftmost ORDER BY expression(s)。
翻译过来的意思是 DISTINCT ON ( expression [, …] )把记录根据[, …]的值进行分组,分组之后仅返回每一组的第一行。需要注意的是,如果你不指定ORDER BY子句,返回的第一条的不确定的。如果你使用了ORDER BY 子句,那么[, …]里面的值必须靠近ORDER BY子句的最左边。
select distinct on(age) id,name,age,sex from xttblog;
上面这个语句,由于没有添加 ORDER BY 子句,所以就有可能在执行时报 SELECT DISTINCT ON expressions must match initial ORDER BY expressions。
另外如果指定了 ORDER BY 子句,但是 DISTINCT ON 中的字段不在 ORDER BY 语句的最左边,也会报 SELECT DISTINCT ON expressions must match initial ORDER BY expressions 错误。
select distinct on(age) id,name,age,sex from xttblog order by id,name;
以上,希望能够帮助到大家!如果还有疑问,欢迎添加我的微信,一起精进!
: » 解决 SELECT DISTINCT ON expressions must match initial ORDER BY expressions 的教程
原创文章,作者:3628473679,如若转载,请注明出处:https://blog.ytso.com/252445.html