ต้องการใช้ row_number() คัดเฉพาะ 2 อันดับแรกของแต่ละแผนกใน PostgreSQL ควรวางเงื่อนไขกรองอย่างไร?
กคำนวณ row_number() ใน WHERE ของ query เดียวกันก่อนเลือกคอลัมน์แล้วกรองทันที
ขคำนวณ row_number() ใน GROUP BY ของ query เดียวกันก่อนจัดกลุ่มแล้วกรองทันที
คคำนวณ row_number() ใน sub-select แล้วกรองเลขลำดับใน query ชั้นนอก
งคำนวณ row_number() ใน HAVING ของ query เดียวกันหลังรวมกลุ่มแล้วกรองทันที
เฉลยอธิบาย
Window function ทำงานหลังการประมวลผล WHERE, GROUP BY และ HAVING จึงนำ row_number ไปกรองโดยตรงในส่วนเหล่านั้นของคิวรีเดียวกันไม่ได้ ควรคำนวณเลขลำดับใน sub-select ก่อน แล้วให้คิวรีชั้นนอกกรองเฉพาะเลขลำดับที่ต้องการ