Rumah >pangkalan data >tutorial mysql >Bagaimanakah saya boleh melakukan penjumlahan bersyarat dalam pertanyaan MSSQL GROUP BY?

Bagaimanakah saya boleh melakukan penjumlahan bersyarat dalam pertanyaan MSSQL GROUP BY?

Patricia Arquette
Patricia Arquetteasal
2025-01-08 07:04:39330semak imbas

How can I perform conditional summing in MSSQL GROUP BY queries?

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:

  • Fungsi

    COUNT() mengira bilangan baris untuk setiap OrderId.

  • Fungsi

    SUM(), apabila digunakan dengan ungkapan CASE, melakukan penjumlahan bersyarat bagi nilai Harga:

    • Jika PriceType ialah 'CopyCost', Harga dijumlahkan.
    • Jika PriceType bukan 'CopyCost' (iaitu 'FullPrice'), jumlahkan lebih 0.
  • Klausa

    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!

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