Làm cách nào để truy xuất cả ba hàng riêng biệt trong một bảng?

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

Làm cách nào tôi có thể nhận được 3 bản ghi bảng trong SQL?

Để làm như vậy, chúng ta cần sử dụng truy vấn nối để lấy dữ liệu từ nhiều bảng. .
CHỌN p. p_id, p. cus_id, p. p_name, c1. tên1, c2. tên2
TỪ sản phẩm NHƯ p
TRÁI THAM GIA khách hàng1 NHƯ c1
Trên P. cus_id=c1. cus_id
TRÁI THAM GIA khách hàng2 NHƯ c2
Trên P. cus_id = c2. cus_id

Làm cách nào để CHỌN các bản ghi duy nhất từ ​​​​một bảng mà không sử dụng riêng biệt?

Dưới đây là các giải pháp thay thế. .
Xóa các bản sao bằng Row_Number. VỚI CTE [Col1, Col2, Col3, DuplicateCount] AS [ SELECT Col1, Col2, Col3, ROW_NUMBER[] OVER[PHẦN THAO BỞI Col1, Col2, Col3 ĐẶT HÀNG THEO Col1] NHƯ DuplicateCount TỪ MyTable ] CHỌN * từ CTE Trong đó DuplicateCount = 1
Loại bỏ các bản sao bằng cách sử dụng nhóm By

Làm cách nào để tìm các bản ghi duy nhất từ ​​hai bảng trong SQL?

Lệnh DISTINCT trong SQL thu thập các bản ghi duy nhất hoặc riêng biệt từ một trường của bảng . Trong bảng sinh viên, chúng ta muốn biết có bao nhiêu bản ghi lớp và lệnh sql DISTINCT chỉ trả về lớp một lần.

Chủ Đề