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

MySQL: ค้นหาสินค้าที่ราคาเฉลี่ยต่อสินค้าน้อยกว่าค่าที่กำหนด

การใช้ HAVING กรองกลุ่มหลัง GROUP BY

ใช้ GROUP BY รวมตาม ProductId แล้ว HAVING AVG(price) < value กรองกลุ่มที่ราคาเฉลี่ยต่ำกว่าเกณฑ์

ตัวอย่าง

mysql> create table DemoTable848(
    ProductId int,
    ProductPrice int );
Query OK, 0 rows affected (1.20 sec)
mysql> insert into DemoTable848 values(100,30);
mysql> insert into DemoTable848 values(101,50);
mysql> insert into DemoTable848 values(100,40);
mysql> insert into DemoTable848 values(101,25);
mysql> insert into DemoTable848 values(100,20);

ค้นหาสินค้าที่ราคาเฉลี่ย < 35

mysql> select ProductId, avg(ProductPrice) 
from DemoTable848 
group by ProductId 
having AVG(ProductPrice) < 35;

ผลลัพธ์ (ProductId 100 มีราคา 30, 40, 20 -> เฉลี่ย 30):

+-----------+-------------------+
| ProductId | avg(ProductPrice) |
+-----------+-------------------+
| 100       | 30.0000           |
+-----------+-------------------+

WHERE vs HAVING

คำสั่งใช้กรองทำงานเมื่อ
WHEREแถวเดี่ยว (Row level)ก่อน GROUP BY
HAVINGกลุ่ม (Group level)หลัง GROUP BY

สรุป

ใช้ GROUP BY product_id HAVING AVG(price) < 35 เพื่อหาสินค้าที่ราคาเฉลี่ยต่ำกว่าเกณฑ์ HAVING ใช้กับ Aggregate Function เท่านั้น