จัดเรียงค่า NULL ไปที่ส่วนท้ายของตาราง


95

มีวิธีกับ PostgreSQL ในการจัดเรียงแถวที่มีNULLค่าในเขตข้อมูลไปยังจุดสิ้นสุดของตารางที่เลือกหรือไม่?

ชอบ:

SELECT * FROM table ORDER BY somevalue, PUT_NULL_TO_END

คำตอบ:


171

แรกของทุกค่าเป็นศูนย์จะเรียงสุดท้ายในการเริ่มต้นจากน้อยไปมากเพื่อ คุณไม่ต้องทำอะไรเพิ่ม

ปัญหานี้ใช้กับลำดับจากมากไปหาน้อยซึ่งเป็นค่าผกผันที่สมบูรณ์แบบดังนั้นจึงเรียงลำดับค่า NULL ก่อน แก้ปัญหา @Mosty ออกมาชี้ถูกนำมาใช้กับPostgreSQL 8.3 :

ORDER BY somevalue DESC NULLS LAST

สำหรับPostgreSQL 8.2และเก่ากว่าหรือ RDBMS อื่น ๆ ที่ไม่มีคุณลักษณะ SQL มาตรฐานนี้คุณสามารถแทนที่:

ORDER BY (somevalue IS NULL), somevalue DESC

FALSEเรียงลำดับก่อนหน้าTRUEดังนั้นค่า NULL จึงเป็นค่าสุดท้ายเช่นเดียวกับในตัวอย่างด้านบน

คำตอบในภายหลังที่เกี่ยวข้อง:


2
IMHO ในแอปพลิเคชันในโลกแห่งความเป็นจริงส่วนใหญ่คุณต้องการให้ค่า null เป็นลำดับสุดท้าย ตัวอย่างเช่นการจัดเรียง DESC บนการประทับเวลาที่เป็นทางเลือกชื่อแรกนามสกุล ... ดังนั้นฉันจึงพบว่ามันน่าสงสัยจริงๆแม้ว่าจะดูสมเหตุสมผลว่าลำดับ DESC ทางคณิตศาสตร์จะตรงข้ามกับ ASC บางทีค่าว่างอาจอยู่ในหมวดหมู่ของตัวเองและไม่ควรได้รับผลกระทบจาก ASC, DESC และใส่สุดท้ายเสมอซึ่งจะเป็นค่าเริ่มต้นที่ดีกว่า
Christophe Roussy

อาจส่งผลต่อดัชนีหากเป็น DESC คุณอาจเพิ่มหมายเหตุเกี่ยวกับเรื่องนี้ด้วย? postgresql.org/message-id/…
Christophe Roussy

@ChristopheRoussy: ดัชนีที่ตรงกับลำดับการจัดเรียงจะถูกแตะในคำตอบที่เชื่อมโยงด้านบน
Erwin Brandstetter

3
โดยส่วนตัวแล้วฉันคิดว่าค่าเริ่มต้นควรจะตรงกันข้าม: NULL มาก่อนจากน้อยไปมากและเรียงลำดับจากมากไปหาน้อย ใช้งานง่ายกว่ามากเนื่องจาก NULL เป็นค่าที่ "น้อยที่สุด"
Stephen

1
สำหรับคนที่มาจาก MYSQL นี่เป็นอะไรรึเปล่า? ทำไมถึงสร้างแบบนี้ตั้งแต่แรก. หรือไม่ Mysql เพิ่มประสิทธิภาพผลลัพธ์
CodeGuru

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.