Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Permintaan untuk menemukan pelanggan dengan jumlah total pembelian tertinggi

Saya yakin kueri berikut akan berfungsi untuk mengidentifikasi nama pelanggan dengan jumlah tertinggi berasal dari semua pesanan di tahun kalender saat ini:

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;

Kueri paling dalam bergabung dengan tabel ORDER, ORDER_LINE, dan PRODUCT yang dikelompokkan menurut ID pelanggan untuk menjumlahkan total pembelian untuk tahun berjalan (pesanan berdasarkan jumlah jumlah menurun). Kueri naik satu tingkat menggunakan hasil kueri dalam dan menambahkan jumlah total pembelian maksimum. Kueri terluar bergabung dengan tabel CUSTOMER_T dengan hasil dalam untuk mendapatkan Nama pelanggan dan jumlah total pesanan untuk semua pelanggan yang cocok dengan nilai MAXAMT.

Anda dapat mengubah kondisi tanggal untuk selalu membatasi hingga 2016 (terlepas dari tahun berjalan) sebagai berikut:

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

Tulis sebagai:

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

Anda juga dapat menarik kueri luar CUSTOMER_T di dalam tabel dalam dan menambahkannya ke gabungan. Ini menyelesaikan hal yang sama, tetapi saya tidak yakin mana yang lebih efisien (yang berlaku jika kumpulan data Anda besar).

Catatan:Ditulis dari perspektif Oracle DB, semoga ini membantu dan Anda dapat mengonversi sintaks.

Sunting:Saya menyadari saran saya akan mengabaikan banyak pelanggan dengan jumlah total pengeluaran yang sama. Saya telah mengerjakan ulang untuk menggunakan MAX dan menunjukkan banyak pelanggan (jika ada). Semoga ini berhasil untuk Anda/dapat dikonversi ke 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. Ubah Tabel gagal karena baris memiliki data yang salah - Nilai waktu tanggal salah:'0000-00-00 00:00:00'

  2. prosedur tersimpan dieksekusi melalui jdbc

  3. Bagaimana saya bisa membatasi pengguna MySQL ke tabel tertentu?

  4. Memperluas daftar Python secara otomatis dengan output yang diformat

  5. cara mendapatkan hasil yang berlawanan dari kueri Laravel