在MySQL中执行sum case when报错:SUM does not exist

1. 报错

在pgsql中能正常运行的一段SQL在MySQL中运行的时候报错了:

        SELECT DATE
            ( hr.handle_time ) AS statsDate,
            SUM ( CASE WHEN hma.app_type IN ( '2', '5' ) THEN ch_money ELSE 0 END ) AS aliPayAmt,
            SUM ( CASE WHEN hma.app_type IN ( '1', '4' ) THEN ch_money ELSE 0 END ) AS wxPayAmt,
            COUNT ( CASE WHEN hma.app_type IN ( '2', '5' ) THEN 1 ELSE NULL END ) AS aliPayTrans,
            COUNT ( CASE WHEN hma.app_type IN ( '1', '4' ) THEN 1 ELSE NULL END ) AS wxPayTrans
        FROM
            hp_record hr
            INNER JOIN hp_record_detail hrd ON hr.record_id = hrd.record_id
            INNER JOIN hp_merchant_app hma ON hr.app_id = hma.app_id
            INNER JOIN hp_channel hc ON hc.ch_id = hrd.ch_id
        WHERE
            hrd.expense_status = '1'
            AND hrd.ch_money > 0
            AND hc.ch_type NOT IN ('100', '101', '102')
        GROUP BY
            DATE(hr.handle_time)
SQL 错误 [1630] [42000]: FUNCTION hipay.SUM does not exist. Check the 'Function Name Parsing and Resolution' section in the Reference Manual

2. 处理方案

报错分析:

  1. MySQL 是支持 CASE WHEN 的,它和其他 SQL 数据库(比如 PostgreSQL、SQL Server 等)一样都支持 CASE 表达式。
  2. MySQL 也支持 SUM 聚合函数。
  3. SQL 语句中的 SUM 函数和 COUNT 函数使用了带有 CASE WHEN 的聚合形式。在 MySQL 中,CASE WHEN 的使用有时会导致解析问题,特别是当 CASE 表达式中没有明确返回的值时,MySQL 可能会尝试错误地解析为某个函数(如 SUM、COUNT)。这个错误提示表明 MySQL 可能错误地将 SUM 解析为一个函数,而不是聚合函数。

修改后的SQL:

SELECT DATE(hr.handle_time) AS statsDate,
       SUM(IF(hma.app_type IN ('2', '5'), ch_money, 0)) AS aliPayAmt,
       SUM(IF(hma.app_type IN ('1', '4'), ch_money, 0)) AS wxPayAmt,
       COUNT(IF(hma.app_type IN ('2', '5'), 1, NULL)) AS aliPayTrans,
       COUNT(IF(hma.app_type IN ('1', '4'), 1, NULL)) AS wxPayTrans
FROM hp_record hr
INNER JOIN hp_record_detail hrd ON hr.record_id = hrd.record_id
INNER JOIN hp_merchant_app hma ON hr.app_id = hma.app_id
INNER JOIN hp_channel hc ON hc.ch_id = hrd.ch_id
WHERE hrd.expense_status = '1'
  AND hrd.ch_money > 0
  AND hc.ch_type NOT IN ('100', '101', '102')
GROUP BY DATE(hr.handle_time);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

364.99°

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值