【发布时间】:2018-02-20 11:59:47
【问题描述】:
如何从 PostgreSQL (8.4.20) 获取唯一行,此时我的查询如下所示:
SELECT
DISTINCT ON(student.id) student.id,
student.*,
programme_stage.*
FROM
person AS student
INNER JOIN
programme ON (student.id = programme.person_id)
RIGHT JOIN
programme_stage ON (programme.id = programme_stage.programme_id)
ORDER BY
student.id,
student.last_name ASC,
student.first_name ASC
LIMIT 10 OFFSET 0
上面的查询可以正常工作,但我想按姓氏和名字的第一顺序排序。
样本数据:
| id | first_name | last_name | programme_id | programme_stage _id |
|----|------------|-----------|--------------|---------------------|
| 1 | Michał | Nowak | 1 | 1 |
| 2 | Jan | Kowalski | 2 | 2 |
| 3 | Tomasz | Thomas | 2 | 1 |
预期输出:
| id | first_name | last_name | programme_id | programme_stage _id |
|----|------------|-----------|--------------|---------------------|
| 2 | Jan | Kowalski | 2 | 2 |
| 1 | Michał | Nowak | 1 | 1 |
| 3 | Tomasz | Thomas | 2 | 1 |
如果我尝试从 order statment student.id 列中删除,我会收到错误:
..SELECT DISTINCT ON expressions must match the expressions .. ORDER BY LINE 2: DISTINCT ON(student_person.id) student_person.id,
^
【问题讨论】:
-
你真的还在用8.4吗?多年来,它已经不受支持
-
请edit您的问题并添加一些sample data 和基于该数据的预期输出。 Formatted text 请no screen shots。 (edit 您的问题 - 在 cmets 中不邮政编码或其他信息)
-
如果从
ORDER BY子句中删除student.id会怎样?
标签: sql postgresql sql-order-by distinct