带有聚合函数的Mysql case语句(如果可以的话,只使用聚合)

时间:2014-04-29 14:54:17

标签: mysql

我的查询一直有效,直到我意识到如果表格为空,max不起作用。我为用户检查position,然后插入一个位置更高的行。如何设置一个案例,如果没有相应user_id的行,我插入一个位置为1的行?我试图做一个案例陈述,但它没有用,我淹没在Mysql语法中。

以下是原始

$stmt = $dbh->prepare("
    insert into 
        dashboard_data 
    (position, user_id)
        select 
            max(position) + 1, 
            :userid 
        from 
            dashboard_data 
        where 
            user_id = :userid
");

这是我对案件陈述的错误尝试

insert into 
        dashboard_data 
    (position, user_id)
        select 
            case 
                when exists 
                    max(position)
                then 
                    max(position) + 1 
                else 
                    1
            end case,
            :userid 
        from 
            dashboard_data 
        where 
            user_id = :userid

2 个答案:

答案 0 :(得分:2)

使用coalesce()

insert into dashboard_data(position, user_id)
    select coalesce(max(position), 0) + 1, 
           :userid 
    from dashboard_data 
    where user_id = :userid;

答案 1 :(得分:1)

您可以使用IFNULL,它允许您用其他东西替换NULL值。

https://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_ifnull