select distinct(pattern) as pattern,style,... etc ... from styleview where ... etc ...
请注意,这不是SELECT上的普通DISTINCT限定符 – 至少它不是DISTINCT限定符的常规语法,请注意括号.它显然使用DISTINCT作为函数,或者这可能是一些特殊的语法.
知道这意味着什么吗?
如果我写的话,我试着用它玩一点
select distinct(foo) from bar
我得到了相同的结果
select distinct foo from bar
当我将它与同一个选择中的其他字段组合时,我不清楚它到底在做什么.
我在Postgres文档中找不到任何内容.
谢谢你的帮助!
解决方法
实际上这是SELECT上的普通DISTINCT限定符 – 但是具有误导性的语法(你对这一点是正确的).
DISTINCT永远不是一个函数,总是一个关键字.在这里(错误地)使用它就好像它是一个函数,但是
select distinct(pattern) as pattern,... etc ... from styleview where ... etc ...
实际上相当于以下所有形式:
– 在不同之后添加空格:
select distinct (pattern) as pattern,... etc ... from styleview where ... etc ...
select distinct pattern as pattern,... etc ... from styleview where ... etc ...
– 缩进条款内容:
select distinct pattern as pattern,... etc ... from styleview where ... etc ...
– 删除与列名相同的冗余别名:
select distinct pattern,... etc ... from styleview where ... etc ...
补充阅读:
> http://weblogs.sqlteam.com/jeffs/archive/2007/10/12/sql-distinct-group-by.aspx
> https://stackoverflow.com/a/1164529
注意:an answer to the present question中的OMG Ponies提到了Postgresql特有的DISTINCT ON扩展.
但是(正如Jay在评论中正确评论的那样)并不是这里使用的,因为查询(和结果)会有所不同,例如:
select distinct on(pattern) pattern,... etc ... from styleview where ... etc ... order by pattern,... etc ...
相当于:
select distinct on (pattern) pattern,... etc ... from styleview where ... etc ... order by pattern,... etc ...
补充阅读:
> http://www.noelherrick.com/blog/postgres-distinct-on
注意:Lukas Eder在an answer to the present question中提到了在聚合函数中使用DISTINCT关键字的语法:HsqlDB的COUNT(DISTINCT(foo,bar,…))语法(或COUNT(DISTINCT foo,…)也适用于MysqL,但也适用于Postgresql,sql Server,Oracle和其他人).但(显然)不是这里使用的.