COUNT avec CASE
Fait partie de la section Au-delà des bases du Journey SQL de Coddy — leçon 12 sur 27.
Vous pouvez placer une expression CASE à l'intérieur d'un agrégat. L'astuce est que COUNT ignore NULL, donc un CASE sans ELSE ne compte que les lignes qui correspondent à la condition.
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersMaintenant, active_count est le nombre de lignes 'active' même si nous n'avons pas filtré l'intégralité de la requête. C'est l'astuce derrière chaque requête de tableau de bord multi-métrique que vous écrirez jamais.
Défi
FacileTables et colonnes disponibles :
<strong>orders</strong>:<strong>id</strong>,<strong>customer_id</strong>,<strong>status</strong>
Pour chaque customer_id, retournez :
customer_idtotal: le nombre total de commandes passées par ce clientshipped: le nombre de commandes oùstatus = 'shipped'cancelled: le nombre de commandes oùstatus = 'cancelled'
Retournez uniquement les clients qui ont au moins une commande annulée. Triez par customer_id.
Aide-mémoire
Utilisez CASE à l'intérieur de COUNT pour compter les lignes correspondant à une condition sans filtrer l'ensemble de la requête (COUNT ignore NULL, donc omettez la clause ELSE) :
SELECT
COUNT(*) AS total,
COUNT(CASE WHEN status = 'active' THEN 1 END) AS active_count
FROM usersEssayez vous-même
SELECT customer_id,
COUNT(*) AS total,
-- shipped, cancelled en utilisant COUNT(CASE ...)
FROM orders
GROUP BY customer_id
-- filtrer pour les clients ayant au moins une annulation
ORDER BY customer_id
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Au-delà des bases
1Logique conditionnelle
CASE WHENCASE dans ORDER BYCOALESCE pour les NULLsNULLIF et IIFRécapitulatif - Présences3Agrégation conditionnelle
COUNT avec CASESUM avec CASEPivoter des lignes en colonnesRécapitulatif - Sources de trafic