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

คำนวณผลรวมคอลัมน์ตามเงื่อนไขใน MySQL ด้วย DIV และ GROUP BY

SUM() แบบมีเงื่อนไข: จัดกลุ่มด้วย DIV (Integer Division)

ตัวอย่างนี้ใช้ DIV (หารจำนวนเต็ม) เพื่อจัดกลุ่ม ProductId เป็นช่วงๆ (100-109, 110-119, 120-129) แล้วคำนวณ SUM ของ ProductPrice ในแต่ละช่วง

สร้างตารางและข้อมูล

mysql> CREATE TABLE DemoTable1489 (
    -> ProductId INT,
    -> ProductPrice INT
    -> );
Query OK, 0 rows affected (0.49 sec)

mysql> INSERT INTO DemoTable1489 VALUES
    -> (100, 900), (115, 1000), (119, 2100), (125, 2100), (128, 2900);
Query OK, 5 rows affected

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

+-----------+--------------+
| ProductId | ProductPrice |
+-----------+--------------+
|       100 |          900 |
|       115 |         1000 |
|       119 |         2100 |
|       125 |         2100 |
|       128 |         2900 |
+-----------+--------------+

คำสั่ง: จัดกลุ่มด้วย ProductId DIV 10 แล้ว SUM

mysql> SELECT ProductId DIV 10, SUM(ProductPrice)
    -> FROM DemoTable1489
    -> GROUP BY ProductId DIV 10;

ผลลัพธ์

+------------------+-------------------+
| ProductId div 10 | sum(ProductPrice) |
+------------------+-------------------+
|               10 |               900 |
|               11 |              3100 |
|               12 |              5000 |
+------------------+-------------------+

คำอธิบาย

ProductIdDIV 10กลุ่มProductPriceSUM
1001010 (100-109)900900
1151111 (110-119)10003100
1191111 (110-119)2100
1251212 (120-129)21005000
1281212 (120-129)2900

เทคนิค SUM แบบมีเงื่อนไขอื่นๆ (Conditional Aggregation)

-- SUM เฉพาะค่าที่มากกว่า 1000
SELECT SUM(CASE WHEN ProductPrice > 1000 THEN ProductPrice ELSE 0 END) 
FROM DemoTable1489;

-- นับจำนวนที่มากกว่า 1000
SELECT SUM(CASE WHEN ProductPrice > 1000 THEN 1 ELSE 0 END) 
FROM DemoTable1489;

-- หรือใช้ IF (MySQL specific)
SELECT SUM(IF(ProductPrice > 1000, ProductPrice, 0)) FROM DemoTable1489;

สรุป

  • DIV = หารจำนวนเต็ม (Integer Division) ต่างจาก / ที่คืนค่าทศนิยม
  • เหมาะสำหรับจัดกลุ่มช่วงตัวเลข (Bucketing)
  • ร่วมกับ GROUP BY และ SUM() ได้ผลลัพธ์สรุปแบบมีเงื่อนไข