(这个问题很老,但是在Google的“ ql区别不是函数”中排名很高(第二,第一个是Stack Overflow),但是仍然缺少令人满意的答案,所以…)
实际上,这 是 SELECT上的普通DISTINCT限定符-但语法具有误导性(您对此很正确)。
DISTINCT永远不是函数,永远不是关键字。在这里(错误地)使用它就像是一个函数,但是
select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
实际上等效于以下所有形式:
select distinct (pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
-删除列名周围的括号:
select distinct pattern as pattern, style, ... etc ...
from styleview
where ... etc ...
-缩进条款内容:
select distinct
pattern as pattern, style, ... etc ...
from
styleview
where
... etc ...
-删除与列名相同的冗余别名:
select distinct
pattern, style, ... etc ...
from
styleview
where
... etc ...
补充阅读:
注意:OMG Ponies回答当前问题时提到了DISTINCTON
Postgresql的扩展名。 但是(正如Jay在评论中正确指出的那样),这里并没有使用它,因为查询(和结果)应该是不同的,例如:
select distinct on(pattern) pattern, style, ... etc ...
from styleview
where ... etc ...
order by pattern, ... etc ...
相当于:
select distinct on (pattern)
pattern, style, ... etc ...
from
styleview
where
... etc ...
order by
pattern, ... etc ...
补充阅读:
注意:LukasEder在对当前问题的回答中提到了在聚合函数中使用DISTINCT关键字 的COUNT(DISTINCT (foo, bar, ...))
语法:HsqlDB所具有的语法 (或者COUNT(DISTINCT foo, bar, ...)
也适用于MysqL,但也适用于Postgresql,sql Server,Oracle以及其他)。 但是(很明显)这不是这里使用的。