MySQL - 如果选择子查询中的计数为空,则更改为 0

Posted

技术标签:

【中文标题】MySQL - 如果选择子查询中的计数为空,则更改为 0【英文标题】:MySQL - if count in select subquery is null change to 0 【发布时间】:2021-03-03 08:54:36 【问题描述】:

我有以下查询:

select `jobs`.*, 
(SELECT COUNT(user_jobs_application.id) as count FROM user_jobs_application
join job_shifts on job_shifts.id = user_jobs_application.job_shift_id
where job_shifts.jobs_id = jobs.id
and user_jobs_application.status = 1
group by user_jobs_application.users_id
) as entries
from `jobs` where `jobs`.`deleted_at` is null order by `id` desc limit 25 offset 0

select 中的子查询将给出 null 而不是 0。我可以更改此设置,如果值为 null,它将显示 0?

【问题讨论】:

【参考方案1】:

从子查询中删除group by 子句就足够了。无论如何都不需要它,因为它在您过滤的列上分组(并且它是必需的,那么我的意思是子查询可能返回多行,这会产生运行时错误)。

select 
    j.*, 
    (
        select count(*) as count 
        from user_jobs_application uja
        join job_shifts js on js.id = uja.job_shift_id
        where js.jobs_id = j.id and uja.status = 1
    ) as entries
from jobs j
where j.deleted_at is null 
order by id desc limit 25 offset 0

您的查询的其他更改:

大概,user_jobs_application(id) 不能为空;如果是这样,count(*) 已经足够好了,而且比count(user_jobs_application.id) 效率更高

表别名使查询更容易读写

【讨论】:

感谢您的帮助和解释 :)

以上是关于MySQL - 如果选择子查询中的计数为空,则更改为 0的主要内容,如果未能解决你的问题,请参考以下文章

MySQL SELECT 增量计数器

如果第一次选择返回 0 计数,则返回备用视图结果

Sqlite:如果结果为空,则为最大子查询设置默认值

如何提高 SQL Server 查询的性能以选择具有值的行不在子查询中的一次计数

检查选择计数值是不是为空/空查询构建器 symfony

如果 SQLite 为空或有记录,则更改片段中的视图