在特定时间段内按sql显示零组

时间:2017-03-04 05:01:36

标签: mysql sql

我正在尝试运行以下查询以获取特定时期内每种类型作业的销售额。但是,对于某些特定工作类型的工作没有执行的特定月份,销售中不会显示0。

如何在这种情况下显示零。

这是sql查询 -

select Year(postedOn), month(postedOn), jobType, sum(price)
from tbl_jobs
group by jobType, year(postedOn), month(postedOn)
order by jobType, year(postedOn), month(postedOn)

1 个答案:

答案 0 :(得分:1)

通常,这是您的通用日历或数字表以一致的顺序集来锚定查询的位置:

SELECT job_summary.*
FROM Calendar
CROSS JOIN (
    -- you may not have though about this part of the problem, though
    -- what about years/months with missing job types?
    SELECT distinct jobType FROM tbl_jobs
) AS job_types
LEFT JOIN (
    select Year(postedOn) AS year,month(postedOn) as month,jobType ,sum(price)
    from tbl_jobs
    group by jobType, year(postedOn), month(postedOn)
) job_summary
    ON job_summary.jobType = job_types.jobType
    AND job_summary.year = Calendar.year
    AND job_summary.month = Calendar.month
WHERE Calendar.day = 1 -- Assuming your calendar is every day
    AND calendar.date BETWEEN some_range_goes_here -- you don't want all time, right?
order by job_types.jobType, Calendar.year, Calendar.month