我有一个带有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计数的行?
答案 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