0Pricing
SQL Interview Prep · บทเรียน

MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข

การรวมวันที่และสตริง รวมถึงความหมายของ MIN เมื่อใช้กับข้อความ

MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข เป็นบทเรียน SQL Interview Prep ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน SQL Interview Prep และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส SQL 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) และปลดล็อคส่วนที่เหลือของคอร์ส SQL Interview Prep ให้อัปเกรดเป็น CoddyKit PRO คอร์ส SQL Interview Prep มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข”

การรวมวันที่และสตริง รวมถึงความหมายของ MIN เมื่อใช้กับข้อความ คุณปฏิบัติ SQL Interview Prep ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน SQL Interview Prep หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน SQL Interview Prep บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน

บทเรียน “MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน SQL Interview Prep นี้ได้ไหม

ได้ บทเรียน SQL Interview Prep ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. COUNT(*) เทียบกับ COUNT(column) เทียบกับ COUNT(DISTINCT)
  2. SUM และ AVG กับ NULL
  3. MIN, MAX และการรวมค่าที่ไม่ใช่ตัวเลข
  4. ฟังก์ชันรวมโดยไม่มี GROUP BY
← กลับไปที่ SQL Interview Prep