Isu MySQL apabila meringkaskan data jualan daripada dua jadual berasingan
P粉391677921
P粉391677921 2024-04-04 14:22:13
0
2
503

Terima kasih terlebih dahulu atas sokongan anda. Saya sedang belajar SQL dan menjana beberapa data untuk dimainkan, tetapi saya terperangkap pada satu perkara mudah. Jadual dalam tangkapan skrin di bawah menunjukkan sebahagian daripada jadual jualan20 saya, yang menunjukkan jualan yang dicapai oleh setiap pekerja pada tahun 2020 berserta maklumat wilayah dan tarikh.

Jualan Meja 20

Saya mempunyai jadual yang sama dari 2021. Apa yang saya mahu lakukan ialah; saya ingin memberikan nama pekerja, wilayah, jumlah jualan yang dicapai oleh pekerja pada tahun 2020 dan 2021. Saya menulis pertanyaan berikut tetapi ia tidak memberikan nombor yang betul. Ia membawa sesuatu yang lebih tinggi daripada yang sepatutnya. Perkara penting ialah pekerja pada 2020 dan 2021 adalah berbeza. Sebagai contoh, terdapat pekerja baharu pada tahun 2021, bermakna dia harus disenaraikan juga, tetapi lajur 2020 untuk pekerja itu hendaklah kosong.

Pertanyaan saya:

SELECT sales20.staff, 
       sales20.region,
       SUM(sales20.amount) AS Total_20,
       SUM(sales21.amount) AS Total_21
  FROM sales20
  JOIN sales21 ON sales20.staff = sales21.staff
 GROUP BY staff, region

Tangkapan skrin separa keputusan:

Hasil:

Boleh beritahu saya apa salah saya?

P粉391677921
P粉391677921

membalas semua(2)
P粉476475551

Apabila anda perlu menggabungkan dua jadual, anda akan menyertainya -

SELECT staff, 
       region,
       SUM(IF(YEAR(saledate) = '2020',amount,0) AS Total_20,
       SUM(IF(YEAR(saledate) = '2021',amount,0) AS Total_21,
  FROM (SELECT staff, region, amount, saledate
          FROM sales20
         UNION ALL
        SELECT staff, region, amount, saledate
          FROM sales21)
 GROUP BY staff, region;
P粉138871485
SELECT sales20.staff,
       sales20.region,
       SUM(sales20.amount) AS Total_20,
       SUM(sales21.amount) AS Total_21
FROM sales20
  JOIN sales21
    ON sales20.staff = sales21.staff
   AND sales20.region = sales21.region
GROUP BY staff,
         region

Anda perlu menyertai 2 jadual berdasarkan orang dan wilayah untuk penyertaan satu lawan satu. Jika anda menyertai hanya berdasarkan pekerja maka ia akan melakukan satu kepada banyak penyertaan supaya anda akan mendapat output yang rosak.

Pendekatan lain ialah menggabungkan data daripada kedua-dua jadual dan kemudian melakukan pengagregatan atas dasar itu. Ini sepatutnya memberi anda hasil yang tepat.

WITH combined_data AS
(
  SELECT staff,
         region,
         saledate,
         amount
  FROM sales20
  UNION ALL
  SELECT staff,
         region,
         saledate,
         amount
  FROM sales21
)
SELECT staff,
       region,
       SUM(CASE WHEN year(saledate) = 2020 THEN amount ELSE 0 END) AS Total_20,
       SUM(CASE WHEN year(saledate) = 2021 THEN amount ELSE 0 END) AS Total_21
FROM combined_data
GROUP BY staff,
         region
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan