ฉันพยายาม แต่ล้มเหลว:
mysql> select max(1,0);
ข้อผิดพลาด 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ; ตรวจสอบคู่มือ ที่สอดคล้องกับรุ่นเซิร์ฟเวอร์ MySQL ของคุณเพื่อใช้ไวยากรณ์ที่ถูกต้อง ใกล้ '0)' ที่บรรทัด 1
ฉันพยายาม แต่ล้มเหลว:
mysql> select max(1,0);
ข้อผิดพลาด 1064 (42000): คุณมีข้อผิดพลาดในไวยากรณ์ SQL ของคุณ; ตรวจสอบคู่มือ ที่สอดคล้องกับรุ่นเซิร์ฟเวอร์ MySQL ของคุณเพื่อใช้ไวยากรณ์ที่ถูกต้อง ใกล้ '0)' ที่บรรทัด 1
คำตอบ:
ใช้สุดยอด ()
เช่น:
SELECT GREATEST(2,1);
หมายเหตุ: เมื่อใดก็ตามที่หากค่าเดียวใด ๆ มีค่า null ในเวลานั้นฟังก์ชันนี้จะส่งกลับค่าว่างเสมอ (ขอบคุณ user @ sanghavi7)
GREATEST
เพื่อที่ฉันจะได้รับค่าสำหรับคอลัมน์ cirtain
select greatest(date1, ifnull(date2, "0000-00-00 00.00:00")) from table1 where date2 is null;
คุณจะได้รับ date1
GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
ในการรับค่าสูงสุดของคอลัมน์ในชุดของแถว:
SELECT MAX(column1) FROM table; -- expect one result
ในการรับค่าสูงสุดของชุดของคอลัมน์ตัวอักษรหรือตัวแปรสำหรับแต่ละแถว:
SELECT GREATEST(column1, 1, 0, @val) FROM table; -- expect many results
GREATEST
กับ ค่า Null ใด ๆ จะทำให้ฟังก์ชันส่งคืนค่า Null เพื่อป้องกันสิ่งนี้คุณสามารถทำได้GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))
คุณสามารถใช้ยิ่งใหญ่ฟังก์ชั่นที่มีเขตข้อมูลไม่ nullable หากหนึ่งในค่านี้ (หรือทั้งสองอย่าง) สามารถเป็น NULL ได้อย่าใช้มัน (ผลลัพธ์อาจเป็น NULL)
select
if(
fieldA is NULL,
if(fieldB is NULL, NULL, fieldB), /* second NULL is default value */
if(fieldB is NULL, field A, GREATEST(fieldA, fieldB))
) as maxValue
คุณสามารถเปลี่ยน NULL ให้เป็นค่าเริ่มต้นที่คุณต้องการ (ถ้าค่าทั้งสองเป็น NULL)
select COALESCE(GREATEST(fieldA, fieldB),fieldA,fieldB) as maxValue
นี้สามารถถูกแทนที่เพียงกับ มันซับซ้อนมากเกินไป
GREATEST(COALESCE(column1, 0), COALESCE(column2, 0))