带聚合函数的Mysql case语句(仅在聚合有效时使用)

带聚合函数的Mysql case语句(仅在聚合有效时使用),mysql,Mysql,我一直在使用这个查询,直到我意识到如果表是空的,max不起作用。我检查用户的位置,然后插入一个位置更高的行。如果没有具有适当用户id的行,我如何设置插入位置为1的行?我试图做一个case语句,但没有成功,我被Mysql语法淹没了 以下是原件 $stmt = $dbh->prepare(" insert into dashboard_data (position, user_id) select max(posit

我一直在使用这个查询,直到我意识到如果表是空的,
max
不起作用。我检查用户的
位置
,然后插入一个位置更高的行。如果没有具有适当用户id的行,我如何设置插入位置为1的行?我试图做一个case语句,但没有成功,我被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

您可以使用IFNULL,这将允许您用其他内容替换NULL值


您可以使用IFNULL,这将允许您用其他内容替换NULL值


您可以使用IFNULL,这将允许您用其他内容替换NULL值


您可以使用IFNULL,这将允许您用其他内容替换NULL值

使用
coalesce()

使用
合并()

使用
合并()

使用
合并()


工作得很好,我让它与10行垃圾一起工作,但这使它下降到1。工作得很好,我让它与10行垃圾一起工作,但这使它下降到1。工作得很好,我让它与10行垃圾一起工作,但这使它下降到1。工作得很好,我让它处理10行垃圾,但这使它降到了1.+1,我已经使用了@marshall的答案,但它仍在工作。@CraigPatrickLafferty Coalesce如果有一系列可能的空值,则效果更好,否则它们的操作方式类似。我同意,不过我碰巧只有一个可能的价值。我以后一定会使用它。+1来自我,已经使用了@marshall的答案,但它仍然有效。@CraigPatrickLafferty Coalesce更好,如果你有一系列可能的空值,否则它们的操作类似。我同意,不过我碰巧只有一个可能的价值。我以后一定会使用它。+1来自我,已经使用了@marshall的答案,但它仍然有效。@CraigPatrickLafferty Coalesce更好,如果你有一系列可能的空值,否则它们的操作类似。我同意,不过我碰巧只有一个可能的价值。我以后一定会使用它。+1来自我,已经使用了@marshall的答案,但它仍然有效。@CraigPatrickLafferty Coalesce更好,如果你有一系列可能的空值,否则它们的操作类似。我同意,不过我碰巧只有一个可能的价值。我以后一定会用这个。
insert into dashboard_data(position, user_id)
    select coalesce(max(position), 0) + 1, 
           :userid 
    from dashboard_data 
    where user_id = :userid;