Jay*_*Jay 7 sql postgresql distinct distinct-on
我刚刚遇到一个SQL查询,特别是针对Postgres数据库,它使用名为"distinct"的函数.即:
select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
Run Code Online (Sandbox Code Playgroud)
请注意,这不是SELECT上的普通DISTINCT限定符 - 至少它不是DISTINCT限定符的常规语法,请注意括号.它显然使用DISTINCT作为函数,或者这可能是一些特殊的语法.
知道这意味着什么吗?
如果我写的话,我试着用它玩一点
select distinct(foo)
from bar
Run Code Online (Sandbox Code Playgroud)
我得到了相同的结果
select distinct foo
from bar
Run Code Online (Sandbox Code Playgroud)
当我将它与同一个选择中的其他字段组合时,我不清楚它到底在做什么.
我在Postgres文档中找不到任何内容.
谢谢你的帮助!
gx_*_*gx_ 10
(这个问题很老,但谷歌的结果很高,"sql distinct不是一个函数"(第二个,Stack Overflow的第一个),但仍然缺少一个令人满意的答案,所以...)
实际上这是 SELECT上的普通DISTINCT限定符 - 但是具有误导性的语法(你对这一点是正确的).
DISTINCT永远不是一个函数,总是一个关键字.在这里(错误地)使用它就好像它是一个函数,但是
select distinct(pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
Run Code Online (Sandbox Code Playgroud)
实际上相当于以下所有形式:
- 之后添加一个空格distinct:
select distinct (pattern) as pattern, style, ... etc ...
from styleview
where ... etc ...
Run Code Online (Sandbox Code Playgroud)
- 删除列名称周围的括号:
select distinct pattern as pattern, style, ... etc ...
from styleview
where ... etc ...
Run Code Online (Sandbox Code Playgroud)
- 缩进条款内容:
select distinct
pattern as pattern, style, ... etc ...
from
styleview
where
... etc ...
Run Code Online (Sandbox Code Playgroud)
- 删除与列名相同的冗余别名:
select distinct
pattern, style, ... etc ...
from
styleview
where
... etc ...
Run Code Online (Sandbox Code Playgroud)
补充阅读:
注意:OMG Ponies在回答当前问题时提到了DISTINCT ONPostgreSQL 的扩展功能.
但是(正如Jay在评论中正确评论的那样)并不是这里使用的,因为查询(和结果)会有所不同,例如:
select distinct on(pattern) pattern, style, ... etc ...
from styleview
where ... etc ...
order by pattern, ... etc ...
Run Code Online (Sandbox Code Playgroud)
相当于:
select distinct on (pattern)
pattern, style, ... etc ...
from
styleview
where
... etc ...
order by
pattern, ... etc ...
Run Code Online (Sandbox Code Playgroud)
补充阅读:
注意:Lukas Eder在回答当前问题时提到了在聚合函数中使用DISTINCT关键字
的COUNT(DISTINCT (foo, bar, ...))语法:HSQLDB特有的语法
(或者COUNT(DISTINCT foo, bar, ...)也适用于MySQL,但也适用于PostgreSQL,SQL Server,Oracle,以及其他人) ).
但(显然)不是这里使用的.
| 归档时间: |
|
| 查看次数: |
5370 次 |
| 最近记录: |