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

ใน MySQL จะเลือก 2 แถวบนสุดสำหรับแต่ละกลุ่มได้อย่างไร?


หากต้องการเลือกแถวบนสุด 2 แถวจากแต่ละกลุ่ม ให้ใช้เงื่อนไข where พร้อมข้อความค้นหาย่อย ให้เราสร้างตาราง แบบสอบถามเพื่อสร้างตารางมีดังนี้:

mysql> สร้างตาราง selectTop2FromEachGroup -> ( -> Name varchar(20), -> TotalScores int -> );Query OK, 0 แถวได้รับผลกระทบ (0.80 วินาที)

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

mysql> แทรกลงในค่า selectTop2FromEachGroup ('John',32);Query OK, 1 แถวที่ได้รับผลกระทบ (0.38 วินาที)mysql> แทรกลงในค่า selectTop2FromEachGroup ('John',33);Query OK, 1 แถวได้รับผลกระทบ (0.21 วินาที) )mysql> แทรกลงในค่า selectTop2FromEachGroup ('John', 34); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.17 วินาที) mysql> แทรกลงในค่า selectTop2FromEachGroup ('Carol', 35); แบบสอบถามตกลง 1 แถวได้รับผลกระทบ (0.17 วินาที) mysql> แทรกในค่า selectTop2FromEachGroup ('Carol',36); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.14 วินาที) mysql> แทรกลงในค่า selectTop2FromEachGroup ('Carol',37); ตกลง ตกลง 1 แถวได้รับผลกระทบ (0.15 วินาที)

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

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

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

<ก่อนหน้า>+-------+-------------+| ชื่อ | คะแนนรวม |+-------+-------------+| จอห์น | 32 || จอห์น | 33 || จอห์น | 34 || แครอล | 35 || แครอล | 36 || แครอล | 37 |+-------+-------------+6 แถวในชุด (0.00 วินาที)

นี่คือแบบสอบถามเพื่อเลือกแถวบนสุด 2 แถวจากแต่ละกลุ่มโดยใช้เงื่อนไขและแบบสอบถามย่อย:

mysql> เลือก *จาก selectTop2FromEachGroup tbl -> where -> ( -> SELECT COUNT(*) -> FROM selectTop2FromEachGroup tbl1 -> WHERE tbl1.Name =tbl.Name AND -> tbl1.TotalScores>=tbl.TotalScores -> ) <=2;

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

<ก่อนหน้า>+-------+-------------+| ชื่อ | คะแนนรวม |+-------+-------------+| จอห์น | 33 || จอห์น | 34 || แครอล | 36 || แครอล | 37 |+-------+-------------+4 แถวในชุด (0.06 วินาที)