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

คิวรี MySQL สำหรับแสดงอันดับของหลายคอลัมน์

บทความนี้จะสาธิตวิธีการคำนวณอันดับ (Rank) ของข้อมูลในหลายคอลัมน์พร้อมกันใน MySQL โดยใช้ฟังก์ชัน FIND_IN_SET() ร่วมกับ GROUP_CONCAT() เพื่อจัดอันดับข้อมูลตามเกณฑ์ที่แตกต่างกัน

ตัวอย่างการสร้างตารางและข้อมูลทดสอบ

mysql> CREATE TABLE DemoTable634 (
    FirstName VARCHAR(100),
    Marks INT,
    Age INT
);
Query OK, 0 rows affected (0.69 sec)

mysql> INSERT INTO DemoTable634 VALUES('John', 60, 23);
mysql> INSERT INTO DemoTable634 VALUES('Chris', 80, 21);
mysql> INSERT INTO DemoTable634 VALUES('Robert', 70, 24);

ข้อมูลในตาราง

+-----------+-------+------+
| FirstName | Marks | Age  |
+-----------+-------+------+
| John      |    60 |   23 |
| Chris     |    80 |   21 |
| Robert    |    70 |   24 |
+-----------+-------+------+

คิวรีสำหรับแสดงอันดับของคะแนนและอายุ

mysql> SELECT 
    FirstName,
    Marks,
    Age,
    FIND_IN_SET(Marks, (
        SELECT GROUP_CONCAT(Marks ORDER BY Marks DESC) 
        FROM DemoTable634
    )) AS RankOfMarks,
    FIND_IN_SET(Age, (
        SELECT GROUP_CONCAT(Age ORDER BY Age DESC) 
        FROM DemoTable634
    )) AS RankOfAge
FROM DemoTable634;

ผลลัพธ์

+-----------+-------+------+-------------+-----------+
| FirstName | Marks | Age  | RankOfMarks | RankOfAge |
+-----------+-------+------+-------------+-----------+
| John      |    60 |   23 |           3 |         2 |
| Chris     |    80 |   21 |           1 |         3 |
| Robert    |    70 |   24 |           2 |         1 |
+-----------+-------+------+-------------+-----------+

คำอธิบาย: คิวรีนี้จะจัดอันดับคะแนน (Marks) จากมากไปน้อย และอายุ (Age) จากมากไปน้อยแยกกัน โดย Chris ได้อันดับ 1 ด้านคะแนน แต่อันดับ 3 ด้านอายุ ในขณะที่ Robert อายุมากที่สุดจึงได้อันดับ 1 ด้านอายุ