2017-07-26 84 views
0

我有進行分組的MySQL查詢和統計,但我不能有線路,其中COUNT(*)給出0返回爲零計數和的GroupBy

代碼:

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

請參閱https://meta.stackoverflow.com/questions/333952/why-should-i-provide-an-mcve-for-what-seems-to-me-to-be-a-very-simple- sql-query – Strawberry

+0

你說「我不能有計數爲0的行」和「我怎樣才能讓它返回0行」。在我看來,這些意思是「我不想要任何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; 

它也有可能是你需要外部聯接 - 這取決於你用零計數的意思是行的。

+0

但現在我不明白性別我得到4行,當我應該只有兩個 –

-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 
0

如果只想線路,其中計數爲0,將其添加到年底你SQL:

HAVING count(*) = 0 

如果你不想與0線,使其

HAVING count(*) > 0 

我真的不知道如何使用該查詢獲得零計數,因爲它不使用外部連接,也不計算任何將爲空的列。