如何在PostgreSQL查询中对选定列应用DISTINCT约束?


假设您有一个包含5列的exam_scores表。下面是一个带有示例数据的例子。

姓名(name)学号(roll_no)科目(subject)总分(total_marks)获得分数(marks_obtained)
Anil1英语10056
Anil1数学10065
Anil1科学10045
Roy2英语10078
Roy2数学10098
Roy2科学10067

现在,一个学生可以参加多门科目的考试,因此,一个学生有多行记录。如果您想找出班级的总人数,您可能需要查找roll_no的不同值的数量。您可以对特定列应用distinct约束,如下所示:

SELECT DISTINCT ON (roll_no) name, roll_no
FROM exam_scores
ORDER BY roll_no DESC

以下是上述查询的输出:

姓名(name)学号(roll_no)
Roy2
Anil1

您也可以对列别名应用distinct约束。

SELECT DISTINCT ON (student_id) name as student_name, roll_no as
student_id
FROM exam_scores
ORDER BY student_id ASC

上述查询的输出如下所示:

学生姓名(student_name)学生ID(student_id)
Anil1
Roy2

DISTINCT约束也可以应用于多个列。假设您想查找收到的不同答卷的数量。这将等于(roll_no, subject)组合的不同值的数量。

SELECT DISTINCT ON (roll_no, subject) name, roll_no, subject
FROM exam_scores
ORDER BY roll_no, subject, name DESC

此查询的输出如下所示:

姓名(name)学号(roll_no)科目(subject)总分(total_marks)获得分数(marks_obtained)
Roy2科学10067
Roy2数学10098
Roy2英语10078
Anil1科学10045
Anil1数学10065
Anil1英语10056

请注意,重要的是ORDER BY表达式与DISTINCT ON表达式具有相同的列顺序。ORDER BY表达式可以在DISTINCT ON列之后包含更多列。

更新于:2021年2月2日

126 次查看

启动您的职业生涯

完成课程获得认证

开始
广告