2017-07-26 27 views
0

とリターンゼロは私がGROUPBYとmysqlのクエリを持っていると数えるが、私は、カウント(*)が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

しかし、私はセックスでカウントを取得しない私は私がちょうど2つを持つ必要があるときに私は4行を得る –

-1

あなたのの終わりにこれを追加し、

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

またはあなただけのカウントが0である行をしたい場合はCOALESCE()関数

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

を使用IFNULL()関数を使用することができますSQL:

HAVING count(*) = 0 

あなたは0と行をしたくない場合は、それ

作ります0
HAVING count(*) > 0 

外部結合を使用せず、nullになる列は何もカウントしないため、どのようにしてそのクエリでゼロカウントが得られるのかわかりません。