
BigQuery(BQ) rất hữu ích cho việc phân tích hoặc xử lý dữ liệu.
Nó rất tốt trong việc xử lý dữ liệu khổng lồ. Nó trả về kết quả tóm tắt trong thời gian ngắn.
Thông qua xử lý dữ liệu, đôi khi chúng tôi muốn đánh số.
Ví dụ: trích xuất từ bản ghi thứ nhất đến thứ ba trong mỗi danh mục.
Để có được thứ hạng trong toàn bộ dữ liệu, chúng ta nên sử dụng mệnh đề order by
.
Nhưng làm thế nào chúng ta có thể nhận được số hạng?
Và nếu 4 hồ sơ có số điểm bằng nhau thì rất khó để chọn 3 hồ sơ.
Làm thế nào chúng ta có thể đánh số hồ sơ mà không bị trùng lặp?
Vì vậy, hôm nay tôi giới thiệu về "Cách xếp hạng dữ liệu có tính đến trùng lặp trong BigQuery".
tác giả

Lợi thế để đọc
Bạn có thể hiểu "Cách xếp hạng dữ liệu xem xét trùng lặp trong BigQuery". Sau đó, bạn không phải lo lắng về việc đánh số.
Cách xếp hạng trong BigQuery
Có một số phương pháp để xếp hạng trong BigQuery.
Numbering in BQ
- RANK
- DENSE_RANK
- ROW_NUMBER
Chúng là các chức năng khác nhau.
Vì vậy, giới thiệu từng chức năng.
Dữ liệu
Dù sao, chúng ta nên chuẩn bị dữ liệu.
Nhập tệp CSV này dưới dạng bảng rank_sample
.
Data
id,val 001,100 002,120 003,130 004,100 005,110 006,160 007,170 008,100 009,120 010,200
Với việc sử dụng bảng này, hãy kiểm tra từng chức năng đánh số.
RANK
Đúng như tên gọi, RANK
là hàm xếp hạng.
Chúng ta có thể sử dụng nó như RAK() OVER(ORDER BY <tên cột mà bạn muốn xếp hạng>)
.
SQL
SELECT *, RANK() OVER(ORDER BY val) as rank FROM test.rank_sample order by id
Result
Row | id | val | rank |
1 | 1 | 100 | 1 |
2 | 2 | 120 | 5 |
3 | 3 | 130 | 7 |
4 | 4 | 100 | 1 |
5 | 5 | 110 | 4 |
6 | 6 | 160 | 8 |
7 | 7 | 170 | 9 |
8 | 8 | 100 | 1 |
9 | 9 | 120 | 5 |
10 | 10 | 200 | 10 |
Theo kết quả, chúng ta có thể thấy thứ hạng từ thứ 1 đến thứ 10 trong cột xếp hạng.
Tất cả các bản ghi val=100
đều đứng đầu và bản ghi val=110
tiếp theo đứng thứ 4.
Điều đó có nghĩa là hàm rank
xem xét cùng điểm với cùng thứ hạng và bỏ qua số tiếp theo.
Reference
DENSE_RANK
DENSE_RANK
là hàm đánh số không bỏ qua thứ hạng trùng lặp.
Chúng ta có thể sử dụng nó như DENSE_RANK() OVER(ORDER BY <tên cột>)
.
SQL
SELECT *, DENSE_RANK() OVER(ORDER BY val) as dense_rank FROM test.rank_sample order by id
Result
Row | id | val | dense_rank |
1 | 1 | 100 | 1 |
2 | 2 | 120 | 3 |
3 | 3 | 130 | 4 |
4 | 4 | 100 | 1 |
5 | 5 | 110 | 2 |
6 | 6 | 160 | 5 |
7 | 7 | 170 | 6 |
8 | 8 | 100 | 1 |
9 | 9 | 120 | 3 |
10 | 10 | 200 | 7 |
Chúng ta có thể thấy rằng xếp hạng từ thứ nhất đến thứ 7.
Sự khác biệt so với RANK()
là bản ghi val=110
không phải là thứ 4 mà là thứ 2.
Vì vậy, DENSE_RANK
không bỏ qua xếp hạng trùng lặp.
Reference
ROW_NUMBER
ROW_NUMBER
không phải để xếp hạng mà để đặt số hàng.
Nhưng chúng ta có thể sử dụng nó như ROW_NUMBER() OVER(ORDER BY <tên cột>)
giống như hàm RANK()
.
SQL
SELECT *, ROW_NUMBER() OVER(ORDER BY val) as dense_rank FROM test.rank_sample order by id
Result
Row | id | val | row_number |
1 | 1 | 100 | 1 |
2 | 2 | 120 | 5 |
3 | 3 | 130 | 7 |
4 | 4 | 100 | 2 |
5 | 5 | 110 | 4 |
6 | 6 | 160 | 8 |
7 | 7 | 170 | 9 |
8 | 8 | 100 | 3 |
9 | 9 | 120 | 6 |
10 | 10 | 200 | 10 |
Theo kết quả, chúng ta có thể thấy từ hạng 1 đến hạng 10.
Điểm độc đáo là có bản ghi thứ 2 và thứ 3 trong dữ liệu val=100
.
ROW_NUMBER
chỉ đặt số hàng. Vì vậy, họ có số khác nhau ngay cả trong cùng một bản ghi điểm.
Reference
so sánh
Chúng tôi phân loại RANK
, DENSE_RANK
, ROW_NUMBER
như bên dưới.
Chức năng | Sự miêu tả |
---|---|
RANK | Cùng thứ hạng trong cùng một điểm số. Nếu có ba bản ghi thứ nhất, tiếp theo là thứ 4. |
DENSE_RANK | Cùng thứ hạng trong cùng một điểm số. Nếu có ba bản ghi thứ nhất, tiếp theo là thứ 2. |
ROW_NUMBER | Ngay cả trong cùng một điểm số, nó đánh số khác nhau. |
SQL
SELECT *, RANK() OVER(ORDER BY val) as rank, DENSE_RANK() OVER(ORDER BY val) as dense_rank, ROW_NUMBER() OVER(ORDER BY val) as row_number FROM test.rank_sample order by id
Result
Row | id | val | rank | dense_rank | row_number |
1 | 1 | 100 | 1 | 1 | 1 |
2 | 2 | 120 | 5 | 3 | 5 |
3 | 3 | 130 | 7 | 4 | 7 |
4 | 4 | 100 | 1 | 1 | 2 |
5 | 5 | 110 | 4 | 2 | 4 |
6 | 6 | 160 | 8 | 5 | 8 |
7 | 7 | 170 | 9 | 6 | 9 |
8 | 8 | 100 | 1 | 1 | 3 |
9 | 9 | 120 | 5 | 3 | 6 |
10 | 10 | 200 | 10 | 7 | 10 |
Phần kết luận
Hôm nay tôi đã mô tả về "Cách xếp hạng dữ liệu có tính đến sự trùng lặp trong BigQuery".
Có một số chức năng xếp hạng dưới đây.
Numbering function in BQ
Mỗi tính năng đang theo sau.
Chức năng | Sự miêu tả |
---|---|
RANK | Cùng thứ hạng trong cùng một điểm số. Nếu có ba bản ghi thứ nhất, tiếp theo là thứ 4. |
DENSE_RANK | Cùng thứ hạng trong cùng một điểm số. Nếu có ba bản ghi thứ nhất, tiếp theo là thứ 2. |
ROW_NUMBER | Ngay cả trong cùng một điểm số, nó đánh số khác nhau. |

ROW_NUMBER
để tránh trùng lặp.Có một số bài viết khác về BigQuey.
Nếu bạn quan tâm đến họ, xin vui lòng đọc chúng.
Read more