Tôi đang viết truy vấn SQL bằng cách sử dụng PostgreSQL cần xếp hạng những người "đến" tại một số địa điểm. Tuy nhiên, không phải ai cũng đến. Tôi đang sử dụng chức năng cửa sổ rank()
để tạo cấp bậc đến, nhưng ở những nơi thời gian đến là không, thay vì trả về xếp hạng không, hàm tổng hợp rank()
chỉ xử lý chúng như thể chúng đến sau mọi người khác. Những gì tôi muốn xảy ra là những chương trình không có được một thứ hạng của NULL
thay vì xếp hạng này.Bỏ qua các giá trị null trong chức năng cửa sổ postgresql rank()
Đây là một ví dụ. Giả sử tôi có một bảng dinner_show_up
trông giống như sau:
| Person | arrival_time | Restaurant |
+--------+--------------+------------+
| Dave | 7 | in_and_out |
| Mike | 2 | in_and_out |
| Bob | NULL | in_and_out |
Bob không bao giờ xuất hiện. Truy vấn Tôi đang viết sẽ là:
select Person,
rank() over (partition by Restaurant order by arrival_time asc)
as arrival_rank
from dinner_show_up;
Và kết quả sẽ là
| Person | arrival_rank |
+--------+--------------+
| Dave | 2 |
| Mike | 1 |
| Bob | 3 |
Những gì tôi muốn xảy ra thay vì là thế này:
| Person | arrival_rank |
+--------+--------------+
| Dave | 2 |
| Mike | 1 |
| Bob | NULL |
Hoàn hảo - cảm ơn! –
+1 Thú vị, trong xếp hạng SQL Server sẽ xử lý null trước khi không null và xếp hạng sẽ có khoảng cách, trông giống như postgres xử lý nulls sau khi không null hoặc không đếm chúng ở tất cả? –
@RomanPekar Bạn có thể xác định có hay không bạn muốn NULL lần đầu tiên hoặc cuối cùng trong ORDER BY của hàm RANK() (hoặc truy vấn thông thường của khóa học) -> http://www.postgresql.org/docs/current/static/ indexes-ordering.html – bma