Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Mendapatkan Dua Set Data Berbeza dengan Pengagregatan Bersyarat dalam Satu Pertanyaan SQL?

Bagaimana untuk Mendapatkan Dua Set Data Berbeza dengan Pengagregatan Bersyarat dalam Satu Pertanyaan SQL?

Mary-Kate Olsen
Mary-Kate Olsenasal
2025-01-21 12:36:10480semak imbas

How to Retrieve Two Distinct Data Sets with Conditional Aggregation in a Single SQL Query?

Mengambil Dua Set Data Berasingan Dengan Cekap Menggunakan Pertanyaan SQL Tunggal

Contoh ini menunjukkan cara untuk mendapatkan semula dua set data yang berbeza daripada satu pertanyaan SQL, mengelakkan keperluan untuk berbilang pertanyaan. Kami akan menggunakan jadual transactions (mengandungi lajur id, account_id, budget_id, points dan type) untuk menggambarkan. Matlamatnya adalah untuk mendapatkan:

  1. Jumlah points bagi setiap budget_id dengan type ialah 'peruntukan'.
  2. Jumlah points bagi setiap budget_id dengan type adalah 'isu'.

Penyelesaian: Pengagregatan Bersyarat

Satu pertanyaan SQL boleh mencapai ini menggunakan pengagregatan bersyarat:

<code class="language-sql">SELECT 
    budget_id,
    SUM(CASE WHEN type = 'allocation' THEN points ELSE 0 END) AS allocated_points,
    SUM(CASE WHEN type = 'issue' THEN points ELSE 0 END) AS issued_points
FROM 
    transactions
GROUP BY 
    budget_id;</code>

Pertanyaan ini menggunakan pernyataan CASE (atau IF dalam sesetengah sistem pangkalan data) untuk menjumlahkan points secara bersyarat. Jika type ialah 'peruntukan', points ditambahkan pada allocated_points; jika tidak, 0 ditambah. Logik yang sama digunakan untuk issued_points. Klausa GROUP BY memastikan jumlah dikira untuk setiap budget_id unik.

Keluaran Jangkaan:

Pertanyaan akan mengembalikan set hasil yang serupa dengan ini:

<code>budget_id | allocated_points | issued_points
----------|-------------------|---------------
    434   |       200000      |     100
    242   |       100000      |     5020
    621   |        45000      |     3940</code>

Atas ialah kandungan terperinci Bagaimana untuk Mendapatkan Dua Set Data Berbeza dengan Pengagregatan Bersyarat dalam Satu Pertanyaan SQL?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn