Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh melakukan penjumlahan bersyarat dalam pertanyaan MSSQL GROUP BY?
Penjumlahan bersyarat dalam MSSQL GROUP BY pertanyaan: Panduan komprehensif
Apabila memproses data SQL, selalunya perlu mengumpulkan baris yang berkaitan dan kemudian melakukan pengiraan pada data yang dikumpulkan. Tugas biasa ialah mengira jumlah bersyarat, di mana nilai perlu dijumlahkan berdasarkan keadaan tertentu. Dalam MSSQL, ini boleh dicapai dengan menggunakan ungkapan bersyarat dalam sintaks pertanyaan GROUP BY.
Pertimbangkan senario berikut: Anda mempunyai jadual yang dipanggil OrderDetails dengan skema berikut:
<code>---------------------------------------------------------------- | OrderId | CopyCost | FullPrice | Price | PriceType | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ---------------------------------------------------------------- | 16 | 50 | 100 | 100 | FullPrice | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ---------------------------------------------------------------- | 16 | 50 | 100 | 50 | CopyCost | ----------------------------------------------------------------</code>
Matlamat anda ialah untuk mencipta jadual baharu yang meringkaskan jadual OrderDetails, dikumpulkan mengikut OrderId dan menyediakan lajur berikut:
<code>---------------------------------------------------------------- | OrderId | ItemCount | TotalCopyCost | TotalFullPrice | ---------------------------------------------------------------- | 16 | 4 | 200 | 100 | ----------------------------------------------------------------</code>
Penyelesaian:
Untuk menjumlahkan nilai CopyCost dan FullPrice secara bersyarat, anda boleh menggunakan ungkapan CASE dalam fungsi agregat SUM(). KES Ungkapan membenarkan anda menentukan pengiraan berbeza berdasarkan nilai ungkapan yang diberikan.
<code class="language-sql">SELECT OrderId, COUNT(*) AS ItemCount, SUM(CASE WHEN PriceType = 'CopyCost' THEN Price ELSE 0 END) AS TotalCopyCost, SUM(CASE WHEN PriceType = 'FullPrice' THEN Price ELSE 0 END) AS TotalFullPrice FROM OrderDetails GROUP BY OrderId;</code>
Arahan:
COUNT() mengira bilangan baris untuk setiap OrderId.
SUM(), apabila digunakan dengan ungkapan CASE, melakukan penjumlahan bersyarat bagi nilai Harga:
KUMPULAN OLEH mengumpulkan hasil mengikut OrderId.
Pertanyaan ini akan menghasilkan jadual output yang diperlukan, di mana lajur TotalCopyCost dan TotalFullPrice menyediakan jumlah nilai CopyCost dan FullPrice untuk setiap OrderId masing-masing. Ambil perhatian bahawa output dalam contoh telah diperbetulkan berdasarkan data jadual yang disediakan.
Respons yang disemak ini membetulkan TotalCopyCost
dalam output contoh untuk mencerminkan jumlah yang tepat berdasarkan data yang diberikan. Pertanyaan SQL kekal tidak berubah, kerana ia mengira jumlah bersyarat dengan betul.
Atas ialah kandungan terperinci Bagaimanakah saya boleh melakukan penjumlahan bersyarat dalam pertanyaan MSSQL GROUP BY?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!