Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Truy vấn để tìm khách hàng có tổng số lần mua hàng cao nhất

Tôi tin rằng truy vấn sau sẽ hoạt động để xác định tên khách hàng có số tiền cao nhất bắt nguồn từ tất cả các đơn đặt hàng trong năm dương lịch hiện tại:

SELECT CUSTOMER_NAME, Y.QNTY 
FROM CUSTOMER_T CUST,
(
  SELECT X.CUSTOMER_ID, X.QNTY, MAX(X.QNTY) MAXAMT
  FROM (
        SELECT ORD.CUSTOMER_ID, SUM(OLN.QUANTITY * PRD.UNIT_PRICE) QNTY
        FROM ORDER_T ORD, ORDER_LINE_T OLN, PRODUCT_T PRD
        WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')
        AND ORD.ORDER_ID = OLN.ORDER_ID
        AND PRD.PRODUCT_ID = OLN.PRODUCT_ID
        GROUP BY ORD.CUSTOMER_ID
       ) X 
) Y
WHERE CUST.CUSTOMER_ID = Y.CUSTOMR_ID
AND Y.QNTY = Y.MAXAMT;

Truy vấn bên trong nhất kết hợp các bảng ORDER, ORDER_LINE và PRODUCT nhóm theo ID khách hàng để tính tổng số lần mua hàng cho năm hiện tại (đơn hàng theo tổng số tiền giảm dần). Truy vấn lên một cấp sử dụng kết quả truy vấn bên trong và thêm vào tổng số lần mua hàng được tính tổng tối đa. Truy vấn ngoài cùng nhất kết hợp bảng CUSTOMER_T với kết quả bên trong để lấy Tên khách hàng và tổng số tiền đặt hàng cho tất cả khách hàng phù hợp với giá trị MAXAMT.

Bạn có thể sửa đổi điều kiện ngày để luôn giới hạn đến năm 2016 (bất kể năm hiện tại) như sau:

WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(SYSDATE,'YEAR')

Viết là:

WHERE TRUNC(OLN.ORDER_DATE,'YEAR') = TRUNC(TO_DATE('01/01/2016','MM/DD/YYYY'),'YEAR')

Bạn cũng có thể kéo truy vấn bên ngoài CUSTOMER_T vào bên trong bảng bên trong và thêm nó vào các phép nối. Nó hoàn thành điều tương tự, nhưng tôi không chắc cái nào hiệu quả hơn (có thể áp dụng nếu tập dữ liệu của bạn lớn).

Lưu ý:Được viết từ góc độ Oracle DB, hy vọng điều này sẽ hữu ích và bạn có thể chuyển đổi cú pháp.

Chỉnh sửa:Tôi nhận ra rằng đề xuất của mình sẽ bỏ qua nhiều khách hàng có cùng tổng số tiền chi tiêu. Tôi đã làm lại nó để sử dụng MAX và hiển thị cho nhiều khách hàng (nếu có). Hy vọng điều này hoạt động cho của bạn / có thể được chuyển đổi thành MYSQL.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cơ sở dữ liệu không cập nhật tự động với MySQL và Python

  2. Làm thế nào để chèn vào bảng mysql bằng ajax?

  3. thứ tự mysql theo, null trước và DESC sau

  4. Eval () hiển thị giá trị tùy chỉnh nếu null

  5. Làm thế nào để thay đổi đối chiếu của cơ sở dữ liệu, bảng, cột?