MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข
การรวมวันที่และสตริง รวมถึงความหมายของ MIN เมื่อใช้กับข้อความ
MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข เป็นบทเรียน Coding Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Coding Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
MIN และ MAX ที่มากกว่าตัวเลข
ผู้สมัครมักคิดว่า MIN และ MAX ใช้ได้เฉพาะกับตัวเลข ผู้สัมภาษณ์จึงชอบถามว่า "MAX(name) คืนค่าอะไร? แล้ว MIN(order_date) ล่ะ?"
ความจริงคือ MIN และ MAX ใช้ได้กับชนิดข้อมูลที่จัดลำดับได้ทุกชนิด ไม่ว่าจะเป็นตัวเลข วันที่ หรือสตริง ทักษะที่กำลังทดสอบจริง ๆ คือความเข้าใจกฎการจัดลำดับของข้อมูลแต่ละชนิด
กรณีข้อมูลตัวเลข
เริ่มจากกรณีที่คุ้นเคย สำหรับคอลัมน์ตัวเลข MIN จะคืนค่าที่น้อยที่สุด และ MAX จะคืนค่าที่มากที่สุด ง่าย ๆ
เช่นเดียวกับฟังก์ชันรวมอื่น ๆ MIN และ MAX ไม่สนใจค่า NULL NULL จะไม่ถือเป็นค่าต่ำสุดหรือสูงสุด แต่จะถูกข้ามไป หากทุกค่าเป็น NULL ทั้งสองแบบจะคืนค่า NULL
SELECT MIN(salary) AS lowest, MAX(salary) AS highest
FROM employees;MIN และ MAX กับวันที่
วันที่และค่าประทับเวลาเรียงลำดับได้อย่างสมบูรณ์ ดังนั้น MIN(order_date) จึงให้วันที่แรกสุด และ MAX(order_date) ให้วันที่ล่าสุด
นี่คือวิธีตอบคำถามว่า “คำสั่งซื้อแรกถูกสร้างขึ้นเมื่อใด” (MIN) และ “กิจกรรมล่าสุดเกิดขึ้นเมื่อใด” (MAX) โดยไม่ต้องเรียงลำดับและจำกัดผลลัพธ์ วิธีนี้เป็นแนวทางแบบอิงชุดข้อมูลที่เหมาะสมตามรูปแบบการเขียนคำสั่งทั่วไป
SELECT
MIN(order_date) AS first_order,
MAX(order_date) AS latest_order
FROM orders;ช่วงระหว่างวันที่ในคำสั่งเดียว
คำถามต่อเนื่องที่พบบ่อยคือ “ลูกค้ารายนี้ใช้งานมานานเท่าใดแล้ว” ให้ใช้ MIN และ MAX ร่วมกัน แล้วลบค่าทั้งสองออกจากกัน
วิธีนี้คำนวณช่วงเวลาระหว่างคำสั่งซื้อแรกและคำสั่งซื้อล่าสุด ไวยากรณ์การลบที่แน่นอนแตกต่างกันไปตามภาษาย่อย แต่แนวคิดของ MIN/MAX ใช้ได้โดยทั่วไป และแสดงให้เห็นว่าคุณสามารถอธิบายช่วงข้อมูลด้วยคำสั่งแบบประกาศได้
SELECT
customer_id,
MIN(order_date) AS first_order,
MAX(order_date) AS last_order,
MAX(order_date) - MIN(order_date) AS active_days
FROM orders
GROUP BY customer_id;MIN และ MAX กับข้อความ
นี่คือส่วนที่ทำให้หลายคนประหลาดใจ สำหรับคอลัมน์ข้อความ MIN และ MAX จะใช้การเรียงลำดับตามพจนานุกรม โดยอิงตามกฎการจัดเรียงของคอลัมน์
ดังนั้น MIN(name) จะคืนชื่อที่อยู่ลำดับแรกตามตัวอักษร และ MAX(name) จะคืนชื่อที่อยู่ลำดับสุดท้าย MIN เมื่อใช้กับ {'Carol', 'Alice', 'Bob'} จะคืนค่า 'Alice' ส่วน MAX จะคืนค่า 'Carol'
SELECT MIN(name) AS first_alpha, MAX(name) AS last_alpha
FROM employees;
-- with Alice, Bob, Carol: 'Alice' and 'Carol'กฎการจัดเรียงและความไวต่อตัวพิมพ์ใหญ่เล็ก
การเรียงลำดับข้อความขึ้นอยู่กับกฎการจัดเรียง ซึ่งควบคุมความไวต่อตัวพิมพ์ใหญ่เล็กและกฎตามภูมิภาค ภายใต้กฎการจัดเรียงเริ่มต้นหลายแบบ ตัวพิมพ์ใหญ่อาจถูกจัดลำดับก่อนตัวพิมพ์เล็ก ดังนั้น MAX ของ {'apple', 'Banana'} อาจให้ผลลัพธ์ที่คาดไม่ถึง
ในการสัมภาษณ์งาน ให้กล่าวถึงว่าผลลัพธ์ของ MIN/MAX สำหรับข้อความขึ้นอยู่กับกฎการจัดเรียง ประเด็นละเอียดนี้ช่วยแยกคำตอบที่ท่องจำมาออกจากความเข้าใจจริง
MIN(ข้อความ) ไม่ได้หมายถึงอะไร
ความเข้าใจผิดที่พบบ่อยคือ MIN(name) จะคืนข้อความที่สั้นที่สุด หรือ MAX(name) จะคืนข้อความที่ยาวที่สุด แต่ไม่ใช่เช่นนั้น เพราะทั้งสองอย่างพิจารณาเฉพาะลำดับการเรียง ไม่ใช่ความยาว
หากต้องการข้อความที่ยาวที่สุดจริง ๆ ให้ใช้ ORDER BY กับ LENGTH(name) แล้วเลือกแถวแรก หรือใช้ MAX(LENGTH(name)) หากต้องการเฉพาะค่าความยาว อย่าสับสนระหว่างการเรียงค่ากับความยาว
SELECT MAX(LENGTH(name)) AS longest_name_length
FROM employees;MIN/MAX ไม่รวมคอลัมน์
จุดที่มักพลาด: MIN และ MAX ทำงานกับคอลัมน์เดียวโดยแยกจากกัน ทั้งสองอย่างไม่ได้คืนแถวทั้งหมดที่มีค่าต่ำสุดหรือค่าสูงสุด
หากเขียน SELECT MIN(salary), name โดยไม่จัดกลุ่ม คุณจะไม่ได้ชื่อผู้มีรายได้น้อยที่สุด แต่จะได้รับข้อผิดพลาดหรือชื่อใดชื่อหนึ่งโดยพลการ ขึ้นอยู่กับภาษาย่อย หากต้องการดึงแถวทั้งหมด ให้ใช้ ORDER BY + LIMIT หรือฟังก์ชันหน้าต่าง
-- Wrong assumption: this does NOT give the lowest earner's name.
-- Correct approach to get the whole row:
SELECT name, salary
FROM employees
ORDER BY salary ASC
LIMIT 1;สรุปพฤติกรรมของ NULL สำหรับ MIN/MAX
เช่นเดียวกับ SUM และ AVG, MIN และ MAX จะไม่สนใจ NULL NULL ไม่ใช่ทั้งค่าที่เล็กที่สุดหรือค่าที่ใหญ่ที่สุด
- มีค่าจริงปะปนกับ NULL: ไม่สนใจ NULL และคืนค่าต่ำสุด/สูงสุดของค่าจริง
- มีแต่ NULL หรือไม่มีแถว: MIN และ MAX จะคืนค่าเป็น NULL
ความสอดคล้องของฟังก์ชันรวมค่าเหล่านี้เป็นประเด็นที่กล่าวได้อย่างชัดเจนว่า “ฟังก์ชันรวมค่ามาตรฐานทั้งหมดไม่สนใจ NULL”
การใช้กับกลุ่ม
MIN และ MAX ทำงานได้ดีเมื่อใช้ร่วมกับ GROUP BY เพื่อหาค่าสูงสุดหรือต่ำสุดของแต่ละกลุ่ม “เงินเดือนสูงสุดในแต่ละแผนก” เป็นตัวอย่างคลาสสิก
คำสั่งนี้คืนหนึ่งแถวต่อหนึ่งแผนก พร้อมเงินเดือนสูงสุดของแผนกนั้น จำไว้ว่าผลลัพธ์คือค่าเงินเดือน ไม่ใช่พนักงาน การจับคู่ชื่อพนักงานกับค่านั้นเป็นปัญหาอีกเรื่องหนึ่งที่มักต้องทำต่อ
SELECT department, MAX(salary) AS top_salary
FROM employees
GROUP BY department;วิธีตอบอย่างมั่นใจ
คำตอบที่ดีในการสัมภาษณ์งานคือ “MIN และ MAX ใช้ได้กับข้อมูลทุกชนิดที่จัดลำดับได้ สำหรับตัวเลขจะหมายถึงค่าต่ำสุด/สูงสุด สำหรับวันที่จะหมายถึงวันที่แรกสุด/ล่าสุด และสำหรับข้อความจะเรียงตามตัวอักษรโดยอิงตามกฎการจัดเรียงของคอลัมน์ ทั้งสองอย่างไม่สนใจ NULL และจะคืนค่าเป็น NULL ก็ต่อเมื่อไม่มีค่าที่ไม่ใช่ NULL อยู่เลย ทั้งสองอย่างคืนค่าเดียว ไม่ใช่แถวทั้งหมด ดังนั้นหากต้องการดึงแถว ผมจะใช้ ORDER BY ร่วมกับ LIMIT หรือใช้ฟังก์ชันหน้าต่าง”
ตรวจสอบอย่างรวดเร็ว
ลองวิเคราะห์การรวมค่าข้อความ
สรุป
ทุกเรื่องเกี่ยวกับ MIN และ MAX:
- ใช้ได้กับชนิดข้อมูลที่จัดลำดับได้ทุกชนิด ได้แก่ ตัวเลข วันที่ และข้อความ
- ข้อความใช้ลำดับตัวอักษรตามกฎการจัดเรียง ไม่ใช่ความยาว
- วันที่: MIN = แรกสุด, MAX = ล่าสุด
- ทั้งสองอย่างไม่สนใจ NULL หากมีแต่ NULL หรือไม่มีแถว จะคืนค่า NULL
- คืนค่า ไม่ใช่แถวทั้งหมด — หากต้องการแถวนั้นให้ใช้ ORDER BY + LIMIT
ถัดไป: จะเกิดอะไรขึ้นเมื่อใช้ฟังก์ชันรวมค่าโดยไม่ใช้ GROUP BY
คำถามที่พบบ่อย
บทเรียน “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Coding Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Coding Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข”
การรวมวันที่และสตริง รวมถึงความหมายของ MIN เมื่อใช้กับข้อความ คุณปฏิบัติ Coding Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Coding Interview Prep หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Coding Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Coding Interview Prep นี้ได้ไหม
ได้ บทเรียน Coding Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- COUNT(*) เทียบกับ COUNT(column) เทียบกับ COUNT(DISTINCT)
- SUM และ AVG กับ NULL
- MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข
- ฟังก์ชันรวมโดยไม่มี GROUP BY