Database
 sql >> Teknologi Basis Data >  >> RDS >> Database

SQL SUM() untuk Pemula

Dalam SQL, SUM() fungsi adalah fungsi agregat yang mengembalikan jumlah semua nilai dalam ekspresi yang diberikan.

Ini juga dapat digunakan untuk mengembalikan jumlah semua nilai (unik) yang berbeda dalam sebuah ekspresi.

Ekspresi harus numerik (tidak boleh berupa karakter string, bit string, atau datetime).

Berikut adalah beberapa contoh dasar untuk mendemonstrasikan cara kerjanya.

Tabel Contoh

Misalkan kita memiliki tabel berikut:

SELECT * FROM Products;

Hasil:

+-------------+------------+---------------------------------+----------------+-----------------------------------------+
| ProductId   | VendorId   | ProductName                     | ProductPrice   | ProductDescription                      |
|-------------+------------+---------------------------------+----------------+-----------------------------------------|
| 1           | 1001       | Left handed screwdriver         | 25.99          | Purple. Includes left handed carry box. |
| 2           | 1001       | Long Weight (blue)              | 14.75          | Includes a long wait.                   |
| 3           | 1001       | Long Weight (green)             | 11.99          | Approximate 30 minute waiting period.   |
| 4           | 1002       | Sledge Hammer                   | 33.49          | Wooden handle. Free wine glasses.       |
| 5           | 1003       | Chainsaw                        | 245.00         | Orange. Includes spare fingers.         |
| 6           | 1003       | Straw Dog Box                   | NULL           | Tied with vines. Very chewable.         |
| 7           | 1004       | Bottomless Coffee Mugs (4 Pack) | 9.99           | Brown ceramic with solid handle.        |
| 8           | 1001       | Right handed screwdriver        | 25.99          | Blue. Includes right handed carry box.  |
+-------------+------------+---------------------------------+----------------+-----------------------------------------+

Contoh

Kita dapat menggunakan kueri berikut untuk mendapatkan jumlah semua harga.

SELECT SUM(ProductPrice)
FROM Products;

Hasil:

+--------------------+
| (No column name)   |
|--------------------|
| 367.20             |
+--------------------+

Dalam hal ini, informasi harga disimpan di ProductPrice kolom, jadi kami meneruskannya sebagai argumen ke SUM() fungsi, yang kemudian menghitung jumlah dan mengembalikan hasilnya.

Menggunakan Alias ​​Kolom

Anda akan melihat bahwa hasil sebelumnya tidak menyertakan nama kolom. Ini sudah diduga, karena SUM() fungsi tidak mengembalikan kolom apa pun. Anda dapat dengan mudah memberikan nama kolom dengan menetapkan alias.

SELECT SUM(ProductPrice) AS Sum
FROM Products;

Hasil:

+--------+
| Sum    |
|--------|
| 367.20 |
+--------+

Hasil yang Difilter

SUM() fungsi beroperasi pada baris yang dikembalikan oleh kueri. Jadi jika Anda memfilter hasilnya, hasil dari SUM() akan mencerminkan hal itu.

SELECT SUM(ProductPrice) AS Sum
FROM Products
WHERE VendorId = 1001;

Hasil:

+-------+
| Sum   |
|-------|
| 78.72 |
+-------+

Dalam hal ini, 78,72 adalah jumlah dari semua produk yang ditawarkan oleh vendor tertentu.

NULL Nilai

SUM() fungsi mengabaikan NULL nilai-nilai. Dalam tabel contoh kami di atas, nomor produk 6 telah mendapat NULL dalam ProductPrice kolom, tapi itu diabaikan di SUM() . kami contoh.

Bergantung pada DBMS dan pengaturan Anda, Anda mungkin atau mungkin tidak melihat peringatan bahwa NULL nilai dieliminasi dalam kumpulan hasil.

Berikut ini contoh yang mungkin Anda lihat:

SELECT SUM(ProductPrice) AS Sum
FROM Products;

Hasil:

+--------+
| Sum    |
|--------|
| 367.20 |
+--------+
Warning: Null value is eliminated by an aggregate or other SET operation.

Semua ini memberitahu kita bahwa kolom berisi setidaknya satu NULL nilai, dan diabaikan saat menghitung hasil.

Data Tanggal/Waktu

SUM() fungsi tidak menerima ekspresi tanggal/waktu.

Misalkan kita memiliki tabel berikut:

SELECT PetName, DOB 
FROM Pets;

Hasil:

+-----------+------------+
| PetName   | DOB        |
|-----------+------------|
| Fluffy    | 2020-11-20 |
| Fetch     | 2019-08-16 |
| Scratch   | 2018-10-01 |
| Wag       | 2020-03-15 |
| Tweet     | 2020-11-28 |
| Fluffy    | 2020-09-17 |
| Bark      | NULL       |
| Meow      | NULL       |
+-----------+------------+

Jika kita mencoba menggunakan SUM() pada DOB kolom, kita akan mendapatkan kesalahan.

SELECT SUM(DOB) AS Sum
FROM Pets;

Hasil:

Msg 8117, Level 16, State 1, Line 1
Operand data type date is invalid for sum operator.

Data Karakter

SUM() fungsi juga tidak menerima ekspresi string karakter.

Inilah yang terjadi jika kita mencoba menggunakan SUM() pada ProductName kolom Products kami tabel (yang menggunakan tipe data varchar):

SELECT SUM(ProductName) AS Sum
FROM Products;

Hasil:

Msg 8117, Level 16, State 1, Line 1
Operand data type varchar is invalid for sum operator.

Yang DISTINCT Kata kunci

Anda dapat menggunakan DISTINCT kata kunci dengan SUM() untuk menghitung hanya nilai yang berbeda. Artinya, jika ada nilai duplikat, mereka diperlakukan sebagai satu nilai.

Contoh:

SELECT SUM(DISTINCT ProductPrice) AS DistinctSum
FROM Products;

Hasil:

+---------------+
| DistinctSum   |
|---------------|
| 341.21        |
+---------------+

Kita dapat melihat bahwa hasil ini lebih rendah daripada hasil yang kita dapatkan tanpa DISTINCT kata kunci.

Untuk rekap, kami mendapat 367,20 tanpa DISTINCT kata kunci, dan 341.21 dengan DISTINCT kata kunci.

Ini karena ada dua item yang memiliki harga yang sama (obeng kiri dan obeng kanan sama-sama dihargai 25,99). Oleh karena itu, SUM() fungsi, bila digunakan dengan DISTINCT kata kunci, memperlakukan kedua nilai tersebut sebagai satu, dan menghitung hasilnya sesuai dengan itu.

Fungsi Jendela

Bergantung pada DBMS Anda, Anda mungkin dapat menggunakan OVER klausa dengan SUM() . Anda fungsi untuk membuat fungsi jendela.

Fungsi jendela melakukan operasi seperti agregat pada sekumpulan baris kueri. Ini menghasilkan hasil untuk setiap baris kueri. Ini berbeda dengan operasi agregat, yang mengelompokkan baris kueri ke dalam satu baris hasil.

Berikut adalah contoh untuk mendemonstrasikan konsep tersebut.

Kami telah melihat Products meja. Basis data kami juga memiliki Customers tabel, dan berisi data berikut:

+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| CustomerId   | CustomerName         | PostalAddress     | City       | StateProvince   | ZipCode    | Country   | Phone          |
|--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+
| 1001         | Palm Pantry          | 20 Esplanade      | Townsville | QLD             | 2040       | AUS       | (308) 555-0100 |
| 1002         | Tall Poppy           | 12 Main Road      | Columbus   | OH              | 43333      | USA       | (310) 657-0134 |
| 1003         | Crazy Critters       | 10 Infinite Loops | Cairns     | QLD             | 4870       | AUS       | (418) 555-0143 |
| 1004         | Oops Media           | 4 Beachside Drive | Perth      | WA              | 1234       | AUS       | (405) 443-5987 |
| 1005         | Strange Names Inc.   | 789 George Street | Sydney     | NSW             | 2000       | AUD       | (318) 777-0177 |
| 1006         | Hi-Five Solutionists | 5 High Street     | Highlands  | HI              | 1254       | AUS       | (415) 413-5182 |
+--------------+----------------------+-------------------+------------+-----------------+------------+-----------+----------------+

Kami dapat mengambil data dari tabel ini dan menyajikannya sebagai satu set hasil dengan menggunakan gabungan.

Kita juga dapat menggunakan SUM() fungsi dengan OVER klausa untuk menerapkan fungsi jendela ke data.

SELECT 
    v.VendorName,
    p.ProductName,
    p.ProductPrice,
    SUM(ProductPrice) OVER (PARTITION BY v.VendorName) AS "Sum For This Vendor"
FROM Products p 
INNER JOIN Vendors v 
ON v.VendorId = p.VendorId
ORDER BY VendorName, ProductPrice, "Sum For This Vendor";

Hasil:

+---------------+---------------------------------+----------------+-----------------------+
| VendorName    | ProductName                     | ProductPrice   | Sum For This Vendor   |
|---------------+---------------------------------+----------------+-----------------------|
| Katty Kittens | Bottomless Coffee Mugs (4 Pack) | 9.99           | 9.99                  |
| Mars Supplies | Long Weight (green)             | 11.99          | 78.72                 |
| Mars Supplies | Long Weight (blue)              | 14.75          | 78.72                 |
| Mars Supplies | Right handed screwdriver        | 25.99          | 78.72                 |
| Mars Supplies | Left handed screwdriver         | 25.99          | 78.72                 |
| Pedal Medals  | Straw Dog Box                   | NULL           | 245.00                |
| Pedal Medals  | Chainsaw                        | 245.00         | 245.00                |
| Randy Roofers | Sledge Hammer                   | 33.49          | 33.49                 |
+---------------+---------------------------------+----------------+-----------------------+

Dalam hal ini kami menggunakan OVER klausa dengan SUM() . kami berfungsi untuk mempartisi hasil berdasarkan nama vendor.

Dengan melakukan ini, kami dapat mengembalikan informasi harga untuk setiap produk, serta jumlah semua produk dari vendor tersebut. Jumlahnya berubah saat vendor berubah (kecuali beberapa vendor kebetulan memiliki jumlah yang sama), tetapi tetap sama untuk semua produk dari vendor yang sama.

Konsep ini juga dapat diterapkan ke fungsi agregat lainnya di SQL, seperti AVG() , MIN() , MAX() , dan COUNT() .


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Pemantauan Log Transaksi

  2. Cara Membuat Model Database Dari Awal

  3. Bagaimana Mendesain Sistem yang Siap-Lokalisasi

  4. SQL CREATE TABLE ... SEBAGAI Pernyataan SELECT

  5. Ambang Pengoptimalan – Pengelompokan dan Penggabungan Data, Bagian 4