cơ sở dữ liệu

Cách xếp hạng dữ liệu khi xem xét trùng lặp trong BigQuery

2023-02-25

Share this for your friends.

Cách xếp hạng dữ liệu khi xem xét trùng lặp trong BigQuery

Làm cách nào để xếp hạng dữ liệu trong BigQuery?


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ả


Kỹ sư tầm trung (AI, hệ thống), giỏi Python và SQL.

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, RANKhà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.




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.




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.




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

  • RANK
  • DENSE_RANK
  • ROW_NUMBER

  • 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.


    Thật ấn tượng khi sử dụng ROW_NUMBER để tránh trùng lặp.


    BigQuery Book


    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.


    Share this for your friends.

    If you felt this article is useful, please share.

    にほんブログ村 IT技術ブログへ

    -cơ sở dữ liệu
    -

    © 2024 ITips