sql语句中如何将查询没有的记录也显示在查询结果中,显示为0

用如下代码查询表中数据

select defectClass,count(*) from qua_particle_iis_his where defectClass in (1,2,3,4,5,6) and virtualCode = '122009200013' Group by defectClass

显示结果如下:
图片说明

其中2和4 因为没有记录。 但是我需要显示出来。
想要的显示出的结果是

defectClass                        count(*)
1                                    1036
2                                      0
3                                    788
4                                     0
5                                    296
6                                    130

希望哪位大佬能够帮帮我,感谢

补充维度基数。如果基数过多,建议多加一张维表,直接用这张维表作为主表关联,去空为0就行了。基数很少的话,子查询一张表。

兄弟,解决了吗,我现在也遇到这个问题了

结果

数据

SELECT d.*  FROM

(SELECT
    a.defectClass,a.c
FROM
    (
    SELECT
        1 defectClass,
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =1
            AND virtualCode = '122009200013' 
        ) a 
    ) d
UNION ALL
    (
    SELECT
        a.defectClass,a.c 
FROM
    (
    SELECT
        2 defectClass,
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =2
            AND virtualCode = '122009200013' 
        ) a 
    )  
UNION ALL
    (
    SELECT
        a.defectClass,a.c 
FROM
    (
    SELECT
        3 defectClass,
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =3
            AND virtualCode = '122009200013' 
        ) a 
    ) 
    UNION ALL
    (
    SELECT
        a.defectClass,a.c
FROM
    (
    SELECT
        4 defectClass,
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =4
            AND virtualCode = '122009200013' 
        ) a 
    ) 
        UNION ALL
    (
    SELECT
        a.defectClass,a.c
FROM
    (
    SELECT
        5 defectClass,
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =5
            AND virtualCode = '122009200013' 
        ) a 
    )   UNION ALL
    (
    SELECT
        a.defectClass,a.c
FROM
    (
    SELECT
        6 defectClass,   
        IFNULL( count( defectClass ), 0 ) c,
    CASE
            WHEN defectClass  THEN
            defectClass ELSE 0 
        END 
        FROM
            qua_particle_iis_his 
        WHERE
            defectClass =6
            AND virtualCode = '122009200013' 
        ) a 
    )