2017-09-25 12 views
2

Je cherche à afficher le nombre de tâches de la table de travail groupées par customer_id qui sont approuvées. L'approbation est déterminée si approval_date n'est pas nul. Donc, s'il y a 12 emplois au total, je veux montrer que 7 sont approuvés, par exemple. Si la date d'approbation est nulle, le travail n'est pas approuvé.Colonne SQL pour le comptage des valeurs groupées

select 
    c.customer_name 
    ,count(*) as counts 
    , -- i want to add a column here that tells me which jobs have (j.approval_date is not null) 
from job j 
join customer c on j.customer_id = c.customer_id 
group by c.customer_name 

Le code ci-dessous donne erreur de syntaxe:

,count(approval_date is not null) as is_approved 
+1

count (approval_date)? –

+0

Pas tout à fait - la date d'approbation ne doit pas être nulle pour que le travail soit considéré comme approuvé. –

+0

'COUNT (expression)' ne compte que les valeurs, quelque chose de NULL manque comme discuté [ici] (https://stackoverflow.com/questions/26368794/why-arent-nulls-counted-in-countcolumnname). – HABO

Répondre

2

Vous pouvez utiliser la somme conditionnelle:

select 
    c.customer_name 
    ,count(*) as counts 
    ,SUM(CASE WHEN j.approval_date is not null THEN 1 ELSE 0 END) 
from job j 
join customer c on j.customer_id = c.customer_id 
group by c.customer_name;