加入收藏 | 设为首页 | 会员中心 | 我要投稿 商洛站长网 (https://www.0914zz.com/)- AI应用、CDN、边缘计算、云计算、物联网!
当前位置: 首页 > 数据库 > MsSql > 正文

postgres中的sql C distinct()函数(不是select限定符)

发布时间:2023-12-20 11:02:29 所属栏目:MsSql 来源:DaWei
导读: 我刚刚遇到一个SQL查询,特别是针对Postgres数据库,它使用名为“distinct”的函数.即:


select distinct(pattern) as pattern,style,... etc ...
from styleview
where ... etc ...

我刚刚遇到一个SQL查询,特别是针对Postgres数据库,它使用名为“distinct”的函数.即: select distinct(pattern) as pattern,style,... etc ... from styleview where ... etc ...

请注意,这不是SELECT上的普通DISTINCT限定符 C 至少它不是DISTINCT限定符的常规语法,请注意括号.它显然使用DISTINCT作为函数,或者这可能是一些特殊的语法.

知道这意味着什么吗?

如果我写的话,我试着用它玩一点

select distinct(foo) from bar

我得到了相同的结果

select distinct foo from bar

当我将它与同一个选择中的其他字段组合时,我不清楚它到底在做什么.

我在Postgres文档中找不到任何内容.

谢谢你的帮助!

解决方法 (这个问题很老,但谷歌的结果很高,“sql distinct不是一个函数”(第二个,Stack Overflow的第一个),但仍然缺少一个令人满意的答案,所以…)

实际上这是SELECT上的普通DISTINCT限定符 C 但是具有误导性的语法(你对这一点是正确的).

DISTINCT永远不是一个函数,总是一个关键字.在这里(错误地)使用它就好像它是一个函数,但是

select distinct(pattern) as pattern,... etc ... from styleview where ... etc ...

实际上相当于以下所有形式:

C 在不同之后添加空格:

select distinct (pattern) as pattern,... etc ... from styleview where ... etc ...

C 删除列名称周围的括号:

select distinct pattern as pattern,... etc ... from styleview where ... etc ...

C 缩进条款内容:

select distinct pattern as pattern,... etc ... from styleview where ... etc ...

C 删除与列名相同的冗余别名:

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和其他人).但(显然)不是这里使用的.

(编辑:商洛站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章