On a 3 manières de compter les lignes en SQL :
COUNT(*) compte toutes les lignes, sans s'occuper des valeurs de celles-ci. On l'utilise souvent avec GROUP BY comme dans cette requête sur les prénoms les plus populaires.
SELECT first_name, COUNT(*) FROM people GROUP BY first_name ORDER BY COUNT(*) DESC LIMIT 50
COUNT(DISTINCT column) renvoie le nombre de valeurs distinctes, et est donc très utile si une colonne a des valeurs dupliquées. Par exemple, la requête suivante trouve le nombre d'espèces pour chaque gêne de plante.
SELECT genus, COUNT(DISTINCT species) FROM plants GROUP BY 1 ORDER BY 2 DESC
À noter que GROUP BY 1 signifie de grouper par la 1ère expression du SELECT.
SUM(CASE WHEN expression THEN 1 ELSE 0 END) permet de compter, par exemple dans la requête ci-dessous, combien chaque propriétaire a de chats, de chiens et d'autres animaux.
SELECT owner , SUM(CASE WHEN type = 'dog' THEN 1 ELSE 0 END) AS num_dogs , SUM(CASE WHEN type = 'cat' THEN 1 ELSE 0 END) AS num_cats , SUM(CASE WHEN type NOT IN ('dog','cat') THEN 1 ELSE 0 END) AS num_other FROM pets GROUP BY owner
Ça marche bien si la table a le format
owner | type |
---|---|
1 | dog |
1 | cat |
2 | dog |
2 | parakeet |