使用Count和GroupBy返回零

时间:2017-07-26 21:12:54

标签: mysql sql

我有一个带有groupby和count的mysql查询,但我不能得到count(*)给出0的行。

代码:

SELECT 
    e.sexe as sex, count(*) as number, n.id_niveau as niv

FROM
      fact_resultat f, dim_etudiant e, dim_niveau n 


 WHERE
        f.id_etudiant = e.id_etudiant AND f.id_niveau = n.id_niveau AND
        resultat = 'Non Admis' AND etape = '1'
            AND filiere = 'API'
    GROUP BY sexe , niv

如何让它返回0计数的行?

3 个答案:

答案 0 :(得分:1)

从不FROM子句中使用逗号。 始终使用正确的JOIN语法。

一种可能的解决方案是仅使用条件聚合:

SELECT e.sexe as sex, n.id_niveau as niv
       sum(resultat = 'Non Admis' AND etape = '1' AND filiere = 'API') as number,
FROM fact_resultat f JOIN
     dim_etudiant e
     ON f.id_etudiant = e.id_etudiant JOIN
     dim_niveau n 
     ON f.id_niveau = n.id_niveau
GROUP BY sexe, niv;

您也可能需要外连接 - 取决于零计数行的含义。

答案 1 :(得分:0)

如果您只想要计数为0的行,请将其添加到sql的末尾:

HAVING count(*) = 0

如果您不想要0行,请将其设为

HAVING count(*) > 0

我真的不知道你如何使用该查询获得零计数,因为它不使用外连接并且它不会计算任何将为null的列。

答案 2 :(得分:-1)

您可以使用IFNULL()函数

SELECT e.sexe as sex,
       IFNULL(count(*),0) as number, 
       n.id_niveau as niv
...

或使用COALESCE()函数

SELECT e.sexe as sex,
       COALESCE(count(*),0) as number, 
       n.id_niveau as niv