การเรียงตามหลายคอลัมน์
ใช้คีย์การเรียงลำดับรองเพื่อจัดการค่าที่เสมอกัน
การเรียงตามหลายคอลัมน์ เป็นบทเรียน SQL Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
ปัญหาของค่าที่เท่ากัน
เมื่อเรียงตามคอลัมน์เดียว แถวที่มี ค่าเดียวกัน จะไม่มีการกำหนดลำดับระหว่างกัน ผลิตภัณฑ์สามรายการที่มีราคา 20 เท่ากันอาจถูกส่งกลับมาในลำดับใดก็ได้
หากต้องการให้ลำดับคาดเดาได้อย่างสมบูรณ์ ให้เพิ่มเกณฑ์การเรียงลำดับที่สอง
-- Ties on price are ordered arbitrarily
SELECT name, price
FROM products
ORDER BY price;การระบุเกณฑ์การเรียงลำดับหลายรายการ
ORDER BY รับรายการคอลัมน์ที่คั่นด้วยจุลภาค ฐานข้อมูลจะเรียงตามคอลัมน์แรก จากนั้นใช้คอลัมน์ที่สองจัดการค่าที่เท่ากัน และทำเช่นนี้ต่อไป
ในที่นี้ ผลิตภัณฑ์จะเรียงตามราคา และรายการที่ราคาเท่ากันจะเรียงตามตัวอักษรของชื่อ
SELECT name, price
FROM products
ORDER BY price, name;ลำดับของเกณฑ์มีความสำคัญ
ลำดับของคอลัมน์เปลี่ยนผลลัพธ์ได้ ORDER BY price, name ไม่เหมือนกับ ORDER BY name, price
เกณฑ์แรกเป็นการเรียงหลัก ส่วนเกณฑ์ถัดไปจะมีผลเฉพาะเมื่อเกณฑ์ก่อนหน้ามีค่าเท่ากัน
-- Primary sort by category, then by name within each category
SELECT category, name
FROM products
ORDER BY category, name;ทิศทางแยกตามคอลัมน์
เกณฑ์การเรียงลำดับแต่ละรายการสามารถมีทิศทางของตนเองได้ คุณสามารถผสม ASC และ DESC ได้อย่างอิสระ
คำสั่งนี้จัดกลุ่มตามหมวดหมู่เรียงตามตัวอักษร แต่ภายในแต่ละหมวดหมู่จะแสดงรายการที่แพงที่สุดก่อน
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC;DESC มีผลต่อคอลัมน์แต่ละรายการ
ข้อผิดพลาดที่พบบ่อยคือคิดว่า DESC ที่ท้ายคำสั่งจะกลับลำดับทุกอย่าง จริง ๆ แล้วมีผลเฉพาะคอลัมน์ที่อยู่ก่อนหน้าโดยตรงเท่านั้น
ใน ORDER BY category, price DESC category ยังคงเรียงจากน้อยไปมาก ส่วน price เท่านั้นที่เรียงจากมากไปน้อย
-- category: ASC, price: DESC
SELECT category, price
FROM products
ORDER BY category, price DESC;สามเกณฑ์ขึ้นไป
คุณสามารถต่อเกณฑ์การเรียงลำดับได้มากเท่าที่จำเป็น แต่ละเกณฑ์จะเริ่มมีผลเมื่อเกณฑ์ทั้งหมดก่อนหน้านั้นมีค่าเท่ากัน
เรียงคำสั่งตามวันที่ จากนั้นตามลูกค้า แล้วจึงตามยอดรวมภายในลูกค้าและวันที่เดียวกัน
SELECT created_at, customer_id, total
FROM orders
ORDER BY created_at DESC, customer_id, total DESC;การเรียงลำดับที่คงที่และกำหนดผลลัพธ์ได้แน่นอน
หากต้องการผลลัพธ์ที่ กำหนดได้แน่นอนอย่างสมบูรณ์ ให้ปิดท้ายเกณฑ์การเรียงลำดับด้วยคอลัมน์ที่มีค่าไม่ซ้ำกัน เช่น คีย์หลัก จากนั้นจะไม่มีแถวใดสองแถวที่มีค่าเท่ากันได้
เรื่องนี้สำคัญต่อการแบ่งหน้า ซึ่งคุณจะได้เรียนรู้ในบทเรียนถัดไป
SELECT id, name, price
FROM products
ORDER BY price DESC, id;การผสมนิพจน์กับคอลัมน์
เกณฑ์การเรียงลำดับสามารถผสมระหว่างคอลัมน์ทั่วไปกับนิพจน์ได้ แต่ละเกณฑ์ทำงานเป็นอิสระจากกัน
คำสั่งนี้เรียงตามมูลค่าสินค้าคงคลังจากมากไปน้อย แล้วเรียงตามตัวอักษรของชื่อเพื่อใช้ตัดสินกรณีที่ค่าเท่ากัน
SELECT name, price, stock
FROM products
ORDER BY price * stock DESC, name ASC;การเรียงตามค่าบูลีนเพื่อเลื่อนกลุ่ม
เคล็ดลับที่มีประโยชน์คือใช้การเรียงตามนิพจน์บูลีนเพื่อเลื่อนกลุ่มไปไว้ด้านบนหรือด้านล่าง ใน PostgreSQL false จะเรียงก่อน true
คำสั่งนี้แสดงรายการที่มีสินค้าในสต็อก (stock > 0) ก่อน แล้วจึงแสดงรายการราคาถูกที่สุดภายในแต่ละกลุ่ม
SELECT name, stock, price
FROM products
ORDER BY (stock = 0), price;การควบคุมตำแหน่งของ NULL
โดยค่าเริ่มต้นใน PostgreSQL NULL จะอยู่ ท้ายสุดเมื่อเรียงจากน้อยไปมาก และอยู่ ต้นสุดเมื่อเรียงจากมากไปน้อย คุณสามารถเปลี่ยนแปลงได้ด้วย NULLS FIRST หรือ NULLS LAST ในเกณฑ์ใดก็ได้
SELECT name, discount
FROM products
ORDER BY discount DESC NULLS LAST;นำทุกอย่างมาประกอบกัน
การเรียงหลายเกณฑ์ที่ใช้งานจริงอาจผสมทิศทาง นิพจน์ และการจัดการค่า NULL โปรดอ่านจากซ้ายไปขวา เพราะแต่ละเกณฑ์จะช่วยปรับรายละเอียดจากเกณฑ์ก่อนหน้า
SELECT category, name, price, rating
FROM products
ORDER BY category ASC,
rating DESC NULLS LAST,
price ASC;ตรวจสอบความเข้าใจ
พิจารณา ORDER BY category, price DESC
สรุป
สรุปการเรียงตามหลายคอลัมน์:
- ระบุเกณฑ์การเรียงลำดับโดยคั่นด้วยจุลภาค เกณฑ์ก่อนหน้ามีความสำคัญกว่า
- แต่ละเกณฑ์มี
ASC/DESCของตนเอง - ปิดท้ายด้วยคอลัมน์ที่มีค่าไม่ซ้ำกันเพื่อให้ได้ลำดับที่กำหนดแน่นอน
- ควบคุมค่าที่หายไปด้วย
NULLS FIRST/NULLS LAST
ถัดไป คุณจะจำกัดจำนวนแถวที่ส่งกลับมาด้วย LIMIT และ OFFSET
SELECT category, name, price
FROM products
ORDER BY category ASC, price DESC, id;คำถามที่พบบ่อย
บทเรียน “การเรียงตามหลายคอลัมน์” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การเรียงตามหลายคอลัมน์” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การเรียงตามหลายคอลัมน์”
ใช้คีย์การเรียงลำดับรองเพื่อจัดการค่าที่เสมอกัน คุณปฏิบัติ SQL Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน
บทเรียน “การเรียงตามหลายคอลัมน์” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน SQL Academy นี้ได้ไหม
ได้ บทเรียน SQL Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- การเรียงลำดับด้วย ORDER BY
- การเรียงตามหลายคอลัมน์
- LIMIT และ OFFSET
- การค้นหาระเบียนอันดับต้น ๆ