Mysql

如果沒有行返回,如何顯示返回零?

  • April 18, 2022

我花了半天時間,但仍然沒有找到解決方案,我嘗試了 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')&gt;=DATE_FORMAT(CURDATE(), '%Y-%m-%01') 
AND DATE_FORMAT(end_date,'%Y-%m-%d')&lt;=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')
       &gt;=DATE_FORMAT(CURDATE(), '%Y-%m-%01') 
     AND DATE_FORMAT(end_date,'%Y-%m-%d')
       &lt;=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

引用自:https://dba.stackexchange.com/questions/311027