如何在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 次檢視

啟動您的職業生涯

完成課程獲得認證

開始
廣告
© . All rights reserved.