Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> MySQL

หาผลรวมค่าในคอลัมน์เดียวกันหลายแถวด้วย SUM() ใน MySQL

การหาผลรวม (Summation) ค่าตัวเลขในคอลัมน์ด้วย SUM()

ฟังก์ชัน SUM() เป็น Aggregate Function รวมค่าของคอลัมน์ที่ระบุ (ข้าม NULL อัตโนมัติ)

Syntax

SELECT SUM(column_name) AS alias_name FROM table_name [WHERE condition];

ตัวอย่างการใช้งาน

สร้างตารางราคาสินค้า:

mysql> CREATE TABLE DemoTable739 (Price INT);
Query OK, 0 rows affected (0.65 sec)

mysql> INSERT INTO DemoTable739 VALUES (100), (50), (1200), (500), (800);
Query OK, 5 rows affected

ข้อมูลทั้งหมด:

mysql> SELECT * FROM DemoTable739;
+-------+
| Price |
+-------+
| 100   |
| 50    |
| 1200  |
| 500   |
| 800   |
+-------+
5 rows in set (0.00 sec)

หาผลรวมราคาทั้งหมด:

mysql> SELECT SUM(Price) AS Total_Price FROM DemoTable739;
+-------------+
| Total_Price |
+-------------+
| 2650        |
+-------------+
1 row in set (0.00 sec)

การใช้งานขั้นสูง

  • รวมกับ GROUP BY:
    SELECT category, SUM(price) FROM products GROUP BY category;
  • เงื่อนไขใน SUM (Conditional Sum):
    SELECT 
        SUM(CASE WHEN price > 500 THEN price ELSE 0 END) AS high_value_sum,
        SUM(CASE WHEN price <= 500 THEN price ELSE 0 END) AS low_value_sum
    FROM DemoTable739;
  • SUM DISTINCT: SUM(DISTINCT price) - รวมค่าที่ไม่ซ้ำกัน
  • Window Function (MySQL 8.0+):
    SELECT Price, SUM(Price) OVER () AS total, SUM(Price) OVER (ORDER BY Price) AS running_total FROM DemoTable739;

ฟังก์ชัน Aggregate อื่นๆ

ข้อควรระวัง

  • SUM() คืน NULL หากไม่มีแถวหรือทุกค่าเป็น NULL (ใช้ COALESCE(SUM(col), 0))
  • Overflow: INT รวมกันเยอะอาจเกิน → ใช้ BIGINT หรือ DECIMAL
  • NULL ไม่นับใน SUM (แตกต่างจาก 0)
ฟังก์ชันคำอธิบาย
COUNT(*)นับจำนวนแถว
AVG()ค่าเฉลี่ย
MIN()ค่าต่ำสุด
MAX()ค่าสูงสุด
STD()Standard Deviation
VARIANCE()Variance