คำอธิบาย
บทความนี้แสดงวิธีคำนวณคะแนนเฉลี่ยต่อนักเรียน (กลุ่มตามชื่อ) แล้วนำมาเอาค่าสูงสุดเพียงค่าเดียว โดยใช้ Subquery
ขั้นตอนการสร้างตารางและข้อมูลตัวอย่าง
mysql> create table DemoTable (
StudentName varchar(40),
StudentMarks int );
Query OK, 0 rows affected (0.50 sec)
การเพิ่มข้อมูล
mysql> insert into DemoTable values('Adam', 56);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('Chris', 78);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Adam', 89);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('Robert', 98);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Chris', 65);
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable values('Robert', 34);
Query OK, 1 row affected (0.20 sec)
แสดงข้อมูลทั้งหมด
mysql> select * from DemoTable;
ผลลัพธ์:
+-------------+--------------+ | StudentName | StudentMarks | +-------------+--------------+ | Adam | 56 | | Chris | 78 | | Adam | 89 | | Robert | 98 | | Chris | 65 | | Robert | 34 | +-------------+--------------+ 6 rows in set (0.00 sec)
คิวรี่หาค่าเฉลี่ยสูงสุด
mysql> select max(avSal.StudentMarks)
from (
select avg(StudentMarks) as `StudentMarks`
from DemoTable
group by StudentName
) as avSal;
ผลลัพธ์
+-------------------------+ | max(avSal.StudentMarks) | +-------------------------+ | 72.5000 | +-------------------------+ 1 row in set (0.09 sec)
คำอธิบายขั้นตอน
- Subquery ภายใน: คำนวณค่าเฉลี่ยต่อคน (Adam: 72.5, Chris: 71.5, Robert: 66)
- Query ภายนอก: หาค่าสูงสุดจากผลลัพธ์ Subquery (72.5 ของ Adam)
- ใช้ Alias
avSalสำหรับตารางย่อย
การประยุกต์ใช้
ใช้ได้กับการหาพนักงานขายยอดเฉลี่ยสูงสุด นักเรียนเกรดเฉลี่ยสูงสุด หรือผลิตภัณฑ์_rating_เฉลี่ยสูงสุด