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

หาค่าเฉลี่ยราคาสินค้าจาก Product ID ซ้ำใน MySQL ด้วย AVG() และ GROUP BY

คำนวณค่าเฉลี่ยราคาต่อ Product ID ที่ซ้ำกัน

ใช้ AVG() ร่วมกับ GROUP BY เพื่อรวมแถวที่มี ProductId เดียวกัน และคำนวณค่าเฉลี่ยของ ProductPrice

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

mysql> CREATE TABLE DemoTable1490 (
    -> ProductId VARCHAR(20),
    -> ProductPrice INT
    -> );
Query OK, 0 rows affected (0.43 sec)

mysql> INSERT INTO DemoTable1490 VALUES
    -> ('PRODUCT_100', 700),
    -> ('PRODUCT_200', 500),
    -> ('PRODUCT_200', 1000),
    -> ('PRODUCT_100', 1300),
    -> ('PRODUCT_200', 300);
Query OK, 5 rows affected

ข้อมูลก่อนจัดกลุ่ม

+-------------+--------------+
| ProductId   | ProductPrice |
+-------------+--------------+
| PRODUCT_100 |          700 |
| PRODUCT_200 |          500 |
| PRODUCT_200 |         1000 |
| PRODUCT_100 |         1300 |
| PRODUCT_200 |          300 |
+-------------+--------------+

คำสั่ง: หาค่าเฉลี่ยราคาต่อ ProductId

mysql> SELECT ProductId, AVG(ProductPrice) 
    -> FROM DemoTable1490 
    -> GROUP BY ProductId;

ผลลัพธ์

+-------------+-------------------+
| ProductId   | avg(ProductPrice) |
+-------------+-------------------+
| PRODUCT_100 |         1000.0000 |
| PRODUCT_200 |          600.0000 |
+-------------+-------------------+

การคำนวณยืนยัน

  • PRODUCT_100: (700 + 1300) / 2 = 1000
  • PRODUCT_200: (500 + 1000 + 300) / 3 = 600

ขยายความสามารถ: เพิ่มฟังก์ชันสรุปอื่นๆ

SELECT 
    ProductId,
    COUNT(*) AS total_records,
    AVG(ProductPrice) AS avg_price,
    MIN(ProductPrice) AS min_price,
    MAX(ProductPrice) AS max_price,
    SUM(ProductPrice) AS total_price
FROM DemoTable1490
GROUP BY ProductId;

ผลลัพธ์ขยาย

+-------------+---------------+-----------+-----------+-----------+-------------+
| ProductId   | total_records | avg_price | min_price | max_price | total_price |
+-------------+---------------+-----------+-----------+-----------+-------------+
| PRODUCT_100 |             2 | 1000.0000 |       700 |      1300 |        2000 |
| PRODUCT_200 |             3 |  600.0000 |       300 |      1000 |        1800 |
+-------------+---------------+-----------+-----------+-----------+-------------+

⚠️ หมายเหตุเรื่องชนิดข้อมูล

AVG() บนคอลัมน์ INT จะคืนค่าเป็น DECIMAL (มีทศนิยม) หากต้องการเป็น INT ให้ใช้ CAST(AVG(ProductPrice) AS UNSIGNED) หรือ ROUND(AVG(ProductPrice))