【问题标题】:mysql IFNULL syntax i don't know what's wrongmysql IFNULL 语法我不知道有什么问题
【发布时间】:2014-09-22 08:14:16
【问题描述】:

我将在我的选择查询中使用 IFNULL 检查

我想这样执行,当 sum 为 null 时打印 0

这是我的全部查询

SELECT 

    IFNULL(SELECT SUM(TOT_SALES_PRICE) FROM TB_DEALER_SALES_MNG WHERE DEALER_SEQ = 7 AND DATE_FORMAT(SALES_DATE, '%Y%m' )= DATE_FORMAT(NOW(), '%Y%m') ,0) 
    )AS TOT_SALES_PRICE

有语法错误但我不知道

这是我没有 IFNULL 的查询,它工作得很好 请给我建议

SELECT 
    (SELECT SUM(TOT_SALES_PRICE) FROM TB_DEALER_SALES_MNG WHERE DEALER_SEQ = 7 AND DATE_FORMAT(SALES_DATE, '%Y%m' )= DATE_FORMAT(NOW(), '%Y%m')
    )AS TOT_SALES_PRICE 

【问题讨论】:

  • 子查询返回的行是否(或可以有)多于一行?
  • 您能否尝试在子查询周围添加一组额外的括号,看看是否仍然出现错误? IFNULL((SELECT ....%m')),0)
  • 只返回一行
  • 我打赌@scragar 是正确的...把整个子查询放在括号中。
  • 你是这个意思吗? SELECT (IFNULL(SELECT SUM(TOT_SALES_PRICE) FROM TB_DEALER_SALES_MNG WHERE DEALER_SEQ = 7 AND DATE_FORMAT(SALES_DATE, '%Y%m')= DATE_FORMAT(NOW(), '%Y%m') ,0) )AS TOT_SALES_PRICE

标签: mysql syntax ifnull


【解决方案1】:
SELECT COALESCE(SUM(tot_sales_price),0)) tot_sales_price 
  FROM tb_deaker_sales_mng
 WHERE dealer_seq = 7 
   AND DATE_FORMAT(sales_date, '%Y%m')=DATE_FORMAT(NOW(), '%Y%m')

或者:

SELECT SUM(COALESCE(tot_sales_price,0)) tot_sales_price 
  FROM tb_deaker_sales_mng
 WHERE dealer_seq = 7 
   AND DATE_FORMAT(sales_date, '%Y%m')=DATE_FORMAT(NOW(), '%Y%m')

【讨论】:

  • 如果没有返回行,这将不起作用,这是他为什么需要IFNULL 的最可能的解释,我建议将COALESCE 放在SUM 周围,而不是反过来。
  • 哇,它可以工作,但是当 sum 为空时它返回 0 吗?我不知道 COALESCE
  • @yevgnen,哪一个有效?我认为如果没有行,您需要一个或其他更新的行..也请接受答案:)
  • @yevgnen,嗯,好的,我已经将两者都包括在内,因为 coalesce(sum... 在我的测试中有效,但另一个没有。
猜你喜欢
  • 1970-01-01
  • 2021-09-04
  • 1970-01-01
  • 1970-01-01
  • 2015-09-11
  • 2018-02-27
  • 1970-01-01
  • 2011-01-09
  • 1970-01-01
相关资源
最近更新 更多