DISTINCT ON是否只允许您进一步限制查询结果



我在学习PostgreSQL方面还处于起步阶段(我现在正在学习postgresqltutorial SELECT教程(,并看到了DISTINCT ON。根据我的研究,这实际上是一个非常复杂的&强大的关键字,这有点超出了我现在的水平,但我想要一个基本的理解。

在psql中游刃有余,似乎是一种根据一列中的值筛选数据的方法,而不管其他列中的数据是否匹配。例如,如果你有一张人员和他们的成绩表,你可以进行过滤,这样每个年级只有一个人,而不需要他们有相同的名字,等等。

我走对了吗?

DISTINCT ON是一个奇怪的野兽,如果没有例子,人们可能会很难理解。我的答案大量借鉴了本教程。

创建表格:

CREATE TABLE table1(
id serial,
fruit_1 TEXT,
fruit_2 TEXT
)

插入数据:

INSERT INTO table1 (fruit_1, fruit_2)
VALUES ('apple', 'apple'),
('apple', 'apple'),
('apple', NULL),
(NULL, 'apple'),
('apple', 'mango'),
('apple', 'blueberry'),
('mango', 'apple'),
('mango', 'blueberry'),
('mango', 'mango'),
('blueberry', 'apple'),
('blueberry', 'mango'),
('blueberry', 'blueberry')

SELECT * from table1给出

id  fruit_1    fruit_2
1   apple      apple
2   apple      apple
3   apple      <NULL>
4   <NULL>     apple
5   apple      mango
6   apple      blueberry
7   mango      apple
8   mango      blueberry
9   mango      mango
10  blueberry  apple
11  blueberry  mango
12  blueberry  blueberry

CCD_ 3仅保留所选列的第一行。但是,第一行是不可预测的,所以您需要使用ORDER BY进行排序(并获得可预测的第一行(:

SELECT DISTINCT ON (fruit_1)
id, fruit_1, fruit_2
FROM
table1
ORDER BY fruit_1, fruit_2
id  fruit_1    fruit_2
2   apple      apple
10  blueberry  apple
7   mango      apple
4   <NULL>     apple

您也可以在括号中使用列编号:

SELECT DISTINCT ON (2)
id, fruit_1, fruit_2
FROM
table1
ORDER BY fruit_1, fruit_2

相关内容

  • 没有找到相关文章

最新更新