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

ORDER BY ผลลัพธ์ของฟังก์ชัน 2 คอลัมน์ใน MySQL (คำนวณแล้วเรียง)


แนวคิด

คำนวณสมการจาก 2 คอลัมน์ใน SELECT แล้ว ORDER BY ผลลัพธ์นั้นได้ โดยใช้ alias หรือคำนวณซ้ำใน ORDER BY

รูปแบบคำสั่ง

SELECT (expression) AS calc_name 
FROM yourTable 
ORDER BY calc_name DESC;

ตัวอย่างครบถ้วน

1. สร้างตาราง

mysql> create table orderByAFunctionDemo 
    -> ( 
    -> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, 
    -> FirstNumber int, 
    -> SecondNumber int 
    -> ); 
Query OK, 0 rows affected (0.44 sec)

2. เพิ่มข้อมูล

mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(10,4); 
Query OK, 1 row affected (0.11 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(45,78); 
Query OK, 1 row affected (0.17 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(23,10); 
Query OK, 1 row affected (0.12 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(67,237); 
Query OK, 1 row affected (0.16 sec)
mysql> insert into orderByAFunctionDemo(FirstNumber,SecondNumber) values(12,90); 
Query OK, 1 row affected (0.13 sec)

3. ดูข้อมูลดิบ

mysql> select * from orderByAFunctionDemo;
+----+-------------+--------------+
| Id | FirstNumber | SecondNumber |
+----+-------------+--------------+
| 1  | 10          | 4            |
| 2  | 45          | 78           |
| 3  | 23          | 10           |
| 4  | 67          | 237          |
| 5  | 12          | 90           |
+----+-------------+--------------+

4. คำนวณ (4*FirstNumber + 5*SecondNumber) และเรียง DESC

mysql> select (4*FirstNumber + 5*SecondNumber) as Calculation 
    -> from orderByAFunctionDemo 
    -> order by Calculation desc;
+-------------+
| Calculation |
+-------------+
| 1453        |
| 570         |
| 498         |
| 142         |
| 60          |
+-------------+

การคำนวณย้อนกลับ (Verification)

IdFirstNumberSecondNumber4×F + 5×S
467237268 + 1185 = 1453 ✓
24578180 + 390 = 570 ✓
3231092 + 50 = 142 ✓
5129048 + 450 = 498 ✓
110440 + 20 = 60 ✓

เคล็ดลับ: ใช้ Alias ใน ORDER BY

MySQL อนุญาตให้ใช้ column alias ใน ORDER BY (ต่างจาก WHERE/GROUP BY ที่ใช้ไม่ได้)

กรณีซับซ้อน: ใช้ Subquery หรือ CTE

WITH calculated AS (
  SELECT *, (4*FirstNumber + 5*SecondNumber) AS score
  FROM orderByAFunctionDemo
)
SELECT Id, FirstNumber, SecondNumber, score
FROM calculated
ORDER BY score DESC;

ประโยชน์: ใช้ได้กับสูตรคำนวณทุกชนิด: คณิตศาสตร์ สถิติ การจัดอันดับ คะแนนรวม ฯลฯ