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

จะค้นหาค่าสูงสุดอันดับที่ n ของคอลัมน์ MySQL ได้อย่างไร


หากต้องการค้นหาค่าสูงสุดอันดับที่ n ของคอลัมน์ คุณต้องใช้ ORDER BY DESC พร้อมส่วนคำสั่ง LIMIT หากคุณต้องการค่าสูงสุดอันดับสองของคอลัมน์ ให้ใช้ไวยากรณ์ด้านล่าง:

เลือก *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1,1;

หากคุณต้องการค่าสูงสุดอันดับที่สี่ของคอลัมน์ ให้ใช้ไวยากรณ์ด้านล่าง:

เลือก *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 3,1;

หากคุณต้องการค่าสูงสุดเป็นค่าแรกของคอลัมน์ ให้ใช้ไวยากรณ์ด้านล่าง:

เลือก *FROM yourTableName ORDER BY DESC yourColumnName LIMIT 1;

ตามที่กล่าวไว้ในไวยากรณ์ข้างต้น คุณต้องเปลี่ยนเฉพาะในอนุประโยค LIMIT เพื่อให้เข้าใจไวยากรณ์ข้างต้น ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง NthSalaryDemo -> ( -> Id int ไม่ใช่ NULL AUTO_INCREMENT, -> Name varchar(10), -> Salary int, -> PRIMARY KEY(Id) -> ); แบบสอบถามตกลง 0 แถวได้รับผลกระทบ ( 1.03 วินาที)

แทรกบางระเบียนในตารางโดยใช้คำสั่งแทรก แบบสอบถามมีดังนี้:

mysql> แทรกลงในค่า NthSalaryDemo(Name,Salary) ('Larry',5700);Query OK, 1 แถวได้รับผลกระทบ (0.41 วินาที)mysql> แทรกลงในค่า NthSalaryDemo (ชื่อ,เงินเดือน) ('Sam',6000);แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที)mysql> แทรกลงใน NthSalaryDemo (ชื่อเงินเดือน) ค่า ('Mike',5800); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.16 วินาที) mysql> แทรกลงใน NthSalaryDemo (ชื่อ, เงินเดือน) ค่า ('Carol',4500); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.17 วินาที) mysql> แทรกลงใน NthSalaryDemo (ชื่อเงินเดือน) ค่า ('Bob',4900); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.20 วินาที) mysql> แทรกลงในค่า NthSalaryDemo(Name,Salary) ('David',5400);Query OK, 1 แถวได้รับผลกระทบ (0.27 วินาที)mysql> แทรกลงในค่า NthSalaryDemo(Name,Salary) ('Maxwell',5300);Query OK, 1 แถวที่ได้รับผลกระทบ (0.21 วินาที) mysql> แทรกลงใน NthSalaryDemo (ชื่อ, เงินเดือน) ค่า ('James',4000); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.19 วินาที) mysql> แทรกลงในค่า NthSalaryDemo (ชื่อเงินเดือน) ('Robert' ,4600);แบบสอบถามตกลง ได้รับผลกระทบ 1 แถว (0.19 วินาที)

แสดงระเบียนทั้งหมดจากตารางโดยใช้คำสั่ง select แบบสอบถามมีดังนี้:

mysql> เลือก *จาก NthSalaryDemo;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+---------+-------+| รหัส | ชื่อ | เงินเดือน |+----+---------+-------+| 1 | แลร์รี่ | 5700 || 2 | แซม | 6000 || 3 | ไมค์ | 5800 || 4 | แครอล | 4500 || 5 | บ๊อบ | 4900 || 6 | เดวิด | 5400 || 7 | แม็กซ์เวลล์ | 5300 || 8 | เจมส์ | 4000 || 9 | โรเบิร์ต | 4600 |+----+---------+-------+9 แถวในชุด (0.00 วินาที)

กรณีที่ 1: นี่คือแบบสอบถามเพื่อรับค่าสูงสุดที่ n ของคอลัมน์

แบบสอบถามด้านล่างจะให้ค่าสูงสุดที่สี่ของคอลัมน์ 'เงินเดือน':

mysql> เลือก *จากคำสั่ง NthSalaryDemo ตามขีดจำกัดเงินเดือน 3,1;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+-------+-------+| รหัส | ชื่อ | เงินเดือน |+----+-------+-------+| 6 | เดวิด | 5400 |+----+-------+--------- +1 แถวในชุด (0.00 วินาที)

กรณีที่ 2: นี่คือแบบสอบถามที่จะได้รับค่าสูงสุดอันดับสองของคอลัมน์ 'เงินเดือน':

mysql> เลือก *จากคำสั่ง NthSalaryDemo ตามขีดจำกัดเงินเดือน 1,1;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+------+-------+| รหัส | ชื่อ | เงินเดือน |+----+------+-------+| 3 | ไมค์ | 5800 |+----+------+ -------- +1 แถวในชุด (0.00 วินาที)

กรณีที่ 3: ต่อไปนี้คือข้อความค้นหาเพื่อรับค่าสูงสุดค่าแรกของคอลัมน์:

mysql> เลือก *จากลำดับ NthSalaryDemo ตามขีดจำกัดเงินเดือน 1;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+------+-------+| รหัส | ชื่อ | เงินเดือน |+----+------+-------+| 2 | แซม | 6000 |+----+------+ -------- +1 แถวในชุด (0.00 วินาที)

กรณีที่ 4: หากคุณต้องการได้รับค่าสูงสุดอันดับที่ 8 ของคอลัมน์ "เงินเดือน" ให้ใช้คำค้นหาต่อไปนี้:

mysql> เลือก *จากคำสั่ง NthSalaryDemo ตามขีดจำกัดเงินเดือน 7,1;

ต่อไปนี้เป็นผลลัพธ์:

<ก่อนหน้า>+----+-------+-------+| รหัส | ชื่อ | เงินเดือน |+----+-------+-------+| 4 | แครอล | 4500 |+----+-------+--------+1 แถวในชุด (0.00 วินาที)