Nhận phần trăm thứ 10 và 90 của khách hàng


13

Tôi có một bảng chứa khách hàng và điểm số (dựa trên các yếu tố khác nhau, không liên quan trong trường hợp này; một khách hàng có thể có nhiều điểm), trông giống như sau:

customer_id | score | score_giver_id
====================================
          1 | 100   | 1
          1 | 102   | 1
          1 | 101   | 1
          1 | 140   | 1
          2 | 131   | 3
          1 | 44    | 1
          3 | 223   | 1
          3 | 1     | 2
          3 | 201   | 1
          3 | 211   | 1
          3 | 231   | 1
          3 | 243   | 1

Điều score_giver_idnày không liên quan, nhưng tôi vẫn muốn lấy nó.

Trong ví dụ trên, khi lấy phần trăm thứ 50, được nhóm bởi customer_id, kết quả sẽ là (Tôi đã chọn phần trăm thứ 50 trong ví dụ này, vì nó minh họa những gì tôi muốn làm tốt hơn):

customer_id | score | score_giver_id
====================================
          1 | 101   | 1
          2 | 131   | 3
          3 | 223   | 1

Tôi đã sử dụng phương pháp được mô tả ở đây .

Tôi cần lấy giá trị ở phần trăm thứ 10, tương ứng ở phần trăm thứ 90 trong PostgreQuery. Tôi đã thấy rằng từ 9,4 có một ntilechức năng, nhưng tôi không thực sự hiểu cách thức hoạt động của nó, những gì nó làm và nếu nó giúp tôi.

Tôi đã tìm thấy một đoạn mã hay cho MySQL, nó hoạt động (mặc dù có một số cảnh báo), nhưng tôi muốn sử dụng các hàm dựng sẵn nếu có (đối với MySQL không có, do đó là đoạn trích).

Câu trả lời:


22

Có vẻ như bạn đang ở sau percentile_disc()hàm tổng hợp được đặt hàng.

Các tài liệu nói như sau về nó:

percentile_disc(fraction) WITHIN GROUP (ORDER BY sort_expression)

phần trăm rời rạc: trả về giá trị đầu vào đầu tiên có vị trí trong thứ tự bằng hoặc vượt quá phân số đã chỉ định

Cú pháp hơi lạ đối với một tổng hợp, nhưng sử dụng nó rất dễ:

SELECT percentile_disc(0.9) WITHIN GROUP (ORDER BY score)
  FROM customer_score
 GROUP BY customer_id;

Bạn xác định cột để lấy phần trăm trong ORDER BYmệnh đề.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.