Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mendapatkan jumlah dua lajur yang betul menggunakan kes bila

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粉103739566P粉103739566213 hari yang lalu399

membalas semua(1)saya akan balas

  • P粉590929392

    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.

    balas
    0
  • Batalbalas