Mysql
如果沒有行返回,如何顯示返回零?
我花了半天時間,但仍然沒有找到解決方案,我嘗試了 COALESCE、IFNULL、IS NULL、IF 條件、<=>、IS NOT NULL 等,但對我沒有任何作用。查詢是
SELECT COALESCE(SUM(leave_duration),0) AS On_leaves FROM `emp_leave` WHERE DATE_FORMAT(start_date,'%Y-%m-%d')>=DATE_FORMAT(CURDATE(), '%Y-%m-%01') AND DATE_FORMAT(end_date,'%Y-%m-%d')<=DATE_FORMAT(CURDATE(), '%Y-%m-%31') AND em_id =724 AND leave_status= 'Approved' GROUP BY em_id
如果表中沒有葉子,我希望它顯示 0:/ 請幫助
COALESCE 在您的範例中不起作用的原因是沒有行可以應用該函式。正如@Akina 在他的評論中建議的那樣,您可以通過將查詢用作子查詢來解決它。另一種選擇是添加一行以 0 作為持續時間(假設持續時間為正),然後選擇最長的持續時間:
SELECT MAX(On_leaves) FROM ( SELECT SUM(leave_duration) AS On_leaves FROM emp_leave WHERE DATE_FORMAT(start_date,'%Y-%m-%d') >=DATE_FORMAT(CURDATE(), '%Y-%m-%01') AND DATE_FORMAT(end_date,'%Y-%m-%d') <=DATE_FORMAT(CURDATE(), '%Y-%m-%31') AND em_id =724 AND leave_status= 'Approved' GROUP BY em_id -- is this correct? UNION ALL SELECT 0 AS On_leaves ) AS T
我對您的 GROUP BY 子句有點懷疑。如果您按 em_id 分組,您可能會得到幾個總和,這是您的意圖嗎?
在您的謂詞中使用 DATE_FORMAT 會使索引的使用變得困難並且成本很高。如果 start_date、end_date 是日期,請考慮刪除 DATE_FORMAT