Rumah > Soal Jawab > teks badan
Saya sedang membangunkan program yang akan menjejaki unit yang dijual oleh jurujual, yang boleh sama ada tawaran penuh (1) atau separuh tawaran (0.5). Apa yang perlu saya lakukan ialah mencari cara untuk mendapatkan jumlah semua transaksi dan separuh daripada transaksi yang dikumpulkan mengikut ID jurujual.
Ini adalah struktur pangkalan data:
id | id_penjual | penjual_dua_id | Tarikh dijual |
---|---|---|---|
1 | 5 | kosong | 2022-07-02 |
2 | 3 | 5 | 2022-07-18 |
3 | 4 | kosong | 2022-07-16 |
4 | 5 | 3 | 2022-07-12 |
5 | 3 | 5 | 2022-07-17 |
6 | 5 | kosong | 2022-07-18 |
Jika saya hanya ingin mendapatkan SUM jurujual, saya mempunyai pertanyaan yang sah:
SELECT SUM(case when salesperson_id = 5 and isnull(salesperson_two_id) then 1 end) as fullDeals, SUM(case when salesperson_id != 5 and salesperson_two_id = 5 or salesperson_id = 5 and salesperson_two_id != 5 then 0.5 end) as halfDeals FROM sold_logs WHERE MONTH(sold_date) = 07 AND YEAR(sold_date) = 2022;
Keluaran akan seperti yang dijangkakan:
Semua tawaran | Separuh tawaran |
---|---|
2 | 1.5 |
Apa yang saya ingin capai ialah mendapatkan hasil ini untuk semua jurujual dalam jadual tetapi tidak tahu bagaimana untuk mencapainya. Inilah hasil yang saya nak dapat:
id_penjual | Jumlah Transaksi |
---|---|
5 | 3.5 |
3 | 1.5 |
4 | 1 |
Saya ingin keputusan disusun mengikut jumlah bilangan transaksi jika boleh.
P粉5909293922024-03-20 15:56:49
Gunakan UNION ALL
untuk mendapatkan set hasil yang mengandungi semua baris bagi setiap jurujual, tapis bulan yang anda inginkan dan agregat:
SELECT salesperson_id, SUM(CASE WHEN salesperson_two_id IS NULL THEN 1 ELSE 0.5 END) totalDeals FROM ( SELECT salesperson_id, salesperson_two_id, sold_date FROM sold_logs UNION ALL SELECT salesperson_two_id, salesperson_id, sold_date FROM sold_logs WHERE salesperson_two_id IS NOT NULL ) t WHERE MONTH(sold_date) = 7 AND YEAR(sold_date) = 2022 GROUP BY salesperson_id ORDER BY totalDeals DESC;
Lihat Demo.