แบบสอบถามต่อไปนี้:
SELECT
year, id, rate
FROM h
WHERE year BETWEEN 2000 AND 2009
AND id IN (SELECT rid FROM table2)
GROUP BY id, year
ORDER BY id, rate DESC
อัตราผลตอบแทน:
year id rate
2006 p01 8
2003 p01 7.4
2008 p01 6.8
2001 p01 5.9
2007 p01 5.3
2009 p01 4.4
2002 p01 3.9
2004 p01 3.5
2005 p01 2.1
2000 p01 0.8
2001 p02 12.5
2004 p02 12.4
2002 p02 12.2
2003 p02 10.3
2000 p02 8.7
2006 p02 4.6
2007 p02 3.3
สิ่งที่ฉันต้องการคือผลลัพธ์ 5 อันดับแรกสำหรับแต่ละ id:
2006 p01 8
2003 p01 7.4
2008 p01 6.8
2001 p01 5.9
2007 p01 5.3
2001 p02 12.5
2004 p02 12.4
2002 p02 12.2
2003 p02 10.3
2000 p02 8.7
มีวิธีทำเช่นนี้โดยใช้ LIMIT เช่นตัวดัดแปลงที่ทำงานภายใน GROUP BY หรือไม่
LIMIT
คำสั่ง นี่คือบทความที่อธิบายปัญหาโดยละเอียด: วิธีเลือกแถวแรก / ต่ำสุด / สูงสุดต่อกลุ่มใน SQLเป็นบทความที่ดี - เขาแนะนำวิธีการแก้ปัญหาที่สง่างามและไร้เดียงสาให้กับปัญหา "Top N ต่อกลุ่ม" แล้วค่อย ๆ ปรับปรุงให้ดีขึ้น