【问题标题】:sum case when error in mysqlmysql出错时的sum case
【发布时间】:2018-07-11 01:43:13
【问题描述】:

我写过:

select 
    sum(case when is_trigger = "1" and when lh.ladder_change = "1" then 1 else 0 end),
    lh.member_id as "SFID"
From
  leeds_so.leenk_ladder_config as lc
  left join leeds.leenk_ladder_history as lh on lc.id = lh.ladder_config_id 

group by lh.member_id

limit 100;

我收到一个错误:

ER_PARSE_ERROR: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.member_id as "SFID"
From
  leeds_so.leenk_ladder_config as lc
  left join le' at line 2

我不确定错误是什么。谁能帮我吗? 谢谢!

【问题讨论】:

    标签: mysql sql sum case


    【解决方案1】:

    and when 不是有效的 SQL。删除when。您可以进一步简化逻辑:

    select sum(is_trigger = 1 and lh.ladder_change = 1),
           lh.member_id as SFID
    From leeds_so.leenk_ladder_config lc left join 
         leeds.leenk_ladder_history lh
         on lc.id = lh.ladder_config_id 
    group by lh.member_id
    limit 100;
    

    注意事项:

    • MySQL 将布尔表达式视为数字,“1”表示真,“0”表示假。因此,不需要case
    • 您可能打算使用inner join 或切换表格。您正在按 second 表中的列进行聚合。没有匹配的时候是NULL
    • 双引号不是 SQL 中字符串的合适分隔符。对字符串使用单引号。
    • 我认为常量实际上是数字,所以根本不需要引用。

    【讨论】:

    • 嗯。关闭,但我实际上想要一个 sum(if()) - 因此我尝试 case when。我重写了这个:select sum(if(is_trigger = 1 and lh.ladder_change = 1),1,0), lh.member_id as SFID From leeds_so.leenk_ladder_config lc inner join leeds.leenk_ladder_history lh on lc.id = lh.ladder_config_id group by lh.member_id limit 100; 但我仍然收到错误消息。想法?
    • @AlissaSwartz 。 . .正如我所解释的,您不需要sum(if. . . )sum(case . . . )。您可以对布尔表达式求和。这是一个不错的 MySQL 扩展。试试这个答案中的代码。
    猜你喜欢
    • 2017-06-05
    • 2014-10-23
    • 1970-01-01
    • 2017-06-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多