เลือกหมายเลขแถวใน postgres


102

วิธีเลือกหมายเลขแถวใน postgres

ฉันลองสิ่งนี้:

select
    row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,
    cgcode_odc_mapping_id
  from access_odc.access_odc_mapping_tb
  order by cgcode_odc_mapping_id

และได้รับข้อผิดพลาดนี้:

ข้อผิดพลาด: ข้อผิดพลาดทางไวยากรณ์ที่หรือใกล้ "เกิน"
LINE 1: เลือก row_number () ทับ (ORDER BY cgcode_odc_mapping_id) เป็น

ฉันได้ตรวจสอบหน้าเหล่านี้แล้ว: จะแสดงหมายเลขแถวในแบบสอบถาม PostgreSQL ได้อย่างไร


นี่คือคำถามของฉัน:

 select row_number() over (ORDER BY cgcode_odc_mapping_id)as rownum,cgcode_odc_mapping_id from access_odc.access_odc_mapping_tb order by cgcode_odc_mapping_id 

นี่คือข้อผิดพลาด:

ข้อผิดพลาด: ข้อผิดพลาดทางไวยากรณ์ที่หรือใกล้ "มากกว่า" LINE 1: เลือก row_number () ทับ (ORDER BY cgcode_odc_mapping_id) เป็น


3
Not Workingไม่ได้บอกอะไรที่เราสามารถช่วยได้ โปรดแจ้งข้อความแสดงข้อผิดพลาดและ / หรือข้อมูลที่เกี่ยวข้องอื่น ๆ นอกจากนี้โปรดระบุเวอร์ชันของ PostgreSQL ที่คุณใช้
MatBailie

1
อาจซ้ำกันได้ของHow to show row numbers in PostgreSQL query?
vyegorov

1
เดาว่ามันใช้ไม่ได้เพราะคุณพยายามใช้ฟังก์ชันหน้าต่างกับ PostgreSQL เวอร์ชันเก่าที่ไม่รองรับ
Craig Ringer

2
ไม่มี PostgreSQL เวอร์ชัน 1.8.4
kgrittn

1
กรุณาโพสต์ผลลัพธ์ของselect version()- ไม่มี (และไม่เคยเป็น) เวอร์ชัน 1.8
a_horse_with_no_name

คำตอบ:


178
SELECT tab.*,
    row_number() OVER () as rnum
  FROM tab;

นี่คือส่วนที่เกี่ยวข้องในเอกสาร

ปล. อันนี้ตรงกับคำตอบในคำถามที่อ้างถึง


18
นอกจากนี้คุณยังควรระบุคำสั่งในข้อ:OVER OVER (ORDER BY id)มิฉะนั้นจะไม่รับประกันการสั่งซื้อ
AlexM

3
@pumbo ปรากฏ row_number () ส่งกลับ "หมายเลขแถวของชุดผลลัพธ์" (เช่นเสมอ 1 2 3 4 ... หากคุณระบุover ()) อย่างไรก็ตามหากคุณมีแบบสอบถามภายนอกจัดเรียงลำดับผลลัพธ์ของหลักสูตรใหม่อีกครั้ง ref: stackoverflow.com/a / 3397149/32453ความคิดเห็น
rogerdpack
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.