gpt4 book ai didi

sql - postgres 中的 distinct() 函数(不是选择限定符)

转载 作者:行者123 更新时间:2023-11-29 11:20:53 27 4
gpt4 key购买 nike

我刚刚遇到一个 SQL 查询,专门针对 Postgres 数据库,它使用名为“distinct”的函数。即:

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 文档中找不到任何内容。

感谢您的帮助!

最佳答案

(这个问题很老,但在 Google 搜索结果中“sql distinct is not a function”(Stack Overflow 的第二个,第一个)的结果很高,但仍然缺少令人满意的答案,所以.. .)

实际上,这 SELECT 上的普通 DISTINCT 限定符——但具有误导性语法(您在这一点上是对的)。

DISTINCT 从来都不是一个函数,而是一个关键字。在这里它被(错误地)用作函数,但是

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

实际上等同于以下所有形式:

--在distinct之后加一个空格:

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

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

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

--缩进子句内容:<​​/em>

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

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

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

补充阅读:


注意:OMG 小马 an answer to the present question提到了 PostgreSQL 的 DISTINCT ON 扩展。
但是(正如 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 ...

补充阅读:


注意:an answer to the present question 中的 Lukas Eder提到了在聚合函数中使用 DISTINCT 关键字的语法:
HSQLDB 的 COUNT(DISTINCT (foo, bar, ...)) 语法
(或 COUNT(DISTINCT foo, bar, ...) 也适用于 MySQL,但也适用于 PostgreSQL、SQL Server、Oracle 和其他可能)。
但是(很明显)它不是这里使用的。

关于sql - postgres 中的 distinct() 函数(不是选择限定符),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3408037/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com