TÓM LƯỢC. Bài viết này xem xét các phương pháp để chọn các giá trị riêng biệt từ kết quả truy vấn trong PostgreSQL. Các từ khóa và mệnh đề được thảo luận với các ví dụ bao gồm
1. RIÊNG BIỆT
2. KHÁC BIỆT TRÊN
3. NHÓM THEO
4. ĐANG CÓ
5. Một số lưu ý
Trong bài đăng này, chúng ta sẽ xem cách chọn các giá trị riêng biệt từ các truy vấn/câu lệnh SQL. Một trong những cách dễ nhất để chọn các giá trị riêng biệt là sử dụng từ khóa DISTINCT. Hãy cùng khám phá từ khóa này trước
RIÊNG BIỆT
DISTINCT được sử dụng để xóa các hàng trùng lặp khỏi truy vấn CHỌN và chỉ hiển thị một hàng duy nhất từ tập hợp kết quả.
ví dụ
Hãy thiết lập một bảng mới trong PostgreSQL và sử dụng nó để xem xét một số cách hữu ích mà DISTINCT có thể loại bỏ các bản sao và tiết lộ thông tin hữu ích từ dữ liệu
Đầu tiên, kết nối với thiết bị đầu cuối psql.
/usr/pgsql-11/bin/psql -U postgres postgres
Tạo một bảng, “kiểm tra”.
create table test[col1 int, col2 varchar,col3 date];
--Chèn một vài bản ghi vào bảng “kiểm tra”
insert into test values [1,'abc','2015-09-10'];
insert into test values [1,'abc','2015-09-11'];
insert into test values [2,'xyz','2015-09-12'];
insert into test values [2,'xyz','2015-09-13'];
insert into test values [3,'tcs','2015-01-15'];
insert into test values [3,'tcs','2015-01-18'];
Sử dụng truy vấn CHỌN để xem các hàng của bảng “kiểm tra”
postgres=# select * from test;
col1 | col2 | col3
------+------+------------
1 | abc | 2015-09-10
1 | abc | 2015-09-11
2 | xyz | 2015-09-12
2 | xyz | 2015-09-13
3 | tcs | 2015-01-15
3 | tcs | 2015-01-18
[6 rows]
Bây giờ bảng đã được thiết lập, hãy xem xét một vài cách mà DISTINCT có thể sắp xếp dữ liệu
1. Bạn có thể sử dụng CHỌN với DISTINCT để chỉ tìm các giá trị không trùng lặp từ cột “col1”.
postgres=# select distinct[col1] from test order by col1;
col1
------
1
2
3
[3 rows]
2. CHỌN với DISTINCT cũng có thể được sử dụng trong truy vấn nội tuyến SQL.
postgres=# select col1 from [select distinct[col1] from test order by col1] as foo;
col1
------
1
2
3
[3 rows]
3. DISTINCT cũng có thể được sử dụng với COUNT và các tập hợp khác
postgres=# select col1,count[distinct[col1]] from test group by col1;
col1 | count
------+-------
1 | 1
2 | 1
3 | 1
[3 rows]
4. Bạn có thể sử dụng CHỌN với DISTINCT trên hai cột của bảng.
postgres=# select distinct col1,col2 from test order by 1;
col1 | col2
------+------
1 | abc
2 | xyz
3 | tcs
[3 rows]
5. Bạn cũng có thể sử dụng CHỌN với DISTINCT trên tất cả các cột của bảng.
________số 8
Lưu ý ở đây rằng tất cả các hàng đã được hiển thị, bao gồm cả các hàng trùng lặp, vì không có hàng riêng biệt nào trong cột “col3”
Một biến thể của DISTINCT là DISTINCT ON. bây giờ Hãy cùng khám phá điều này
KHÁC BIỆT TRÊN
When distinct cannot return unique row when all columns combination is not unique then we can use distinct on clause which will give first row from that set of duplicate rows.The column which we are specifying in DISTINCT ON should also be present in the ORDER BY clause; otherwise you will get an error.
Ví dụ
Bạn có thể sử dụng DISTINCT ON để hiển thị giá trị đầu tiên của mỗi giá trị trong “col1”
postgres=# select distinct on [col1] col1,col2,col3 from test order by col1;
col1 | col2 | col3
------+------+------------
1 | abc | 2015-09-10
2 | xyz | 2015-09-13
3 | tcs | 2015-01-15
[3 rows]
Hãy cẩn thận
Có một vài trường hợp không thể sử dụng từ khóa riêng biệt
1. DISTINCT là một từ khóa dành riêng trong PostgreSQL, vì vậy chúng tôi không thể chỉ định nó làm tên đối tượng.
create table test[col1 int, col2 varchar,col3 date];
0
2. Trong một truy vấn CHỌN, chúng ta không thể có nhiều hơn một từ khóa DISTINCT
create table test[col1 int, col2 varchar,col3 date];
1
3. Chúng tôi cũng không thể sử dụng nó trong các điều kiện WHERE và GROUP BY.
create table test[col1 int, col2 varchar,col3 date];
2
hoặc
create table test[col1 int, col2 varchar,col3 date];
3
4. FOR NO KEY UPDATE, FOR UPDATE, FOR SHARE và FOR KEY SHARE không thể được chỉ định với DISTINCT
create table test[col1 int, col2 varchar,col3 date];
4
Một cách phổ biến khác để chọn các giá trị không trùng lặp là sử dụng mệnh đề GROUP BY với HAVING
NHÓM THEO và CÓ
Với GROUP BY và HAVING, bạn có thể chọn các giá trị riêng biệt dựa trên nhóm cột. Trường hợp có thể được sử dụng để tìm các giá trị trùng lặp
Nhóm khôn ngoan về chức năng và riêng biệt hoạt động tương tự nhưng nhóm theo cũng cung cấp tính linh hoạt để sử dụng các chức năng tổng hợp cùng với việc nhận dữ liệu duy nhất. Hiệu suất khôn ngoan cũng nhóm theo tốt hơn so với khác biệt