Pour diverses raisons, il se peut que l'on veuille compter le nombre d'enregistrements suivant plusieurs critères différents, et le tout en une seule requête. Et bien sachez qu'il est même possible de faire autant de COUNT que l'on veut. Enfin, ne soyez pas trop gourmands non plus. MàJ du 2015-02-26 : le nombre maximal de COUNT est défini par la constante SQLITE_MAX_COLUMN, soit 2 000 par défaut.

Imaginons la base de données discussion tel que :

CREATE TABLE discussion(
    quand LONG PRIMARY KEY,
    qui INTEGER,
    msg TEXT
)

quand est une timestamp Unix, soit l'heure d'envoi du message ; qui est l'ID de la personne qui le reçoit et msg contient le fameux message.

Dans un cas simple comme celui-ci, je souhaiterais connaître le nombre de messages qu'ont reçu les personnes ayant les ID 1 et 2 :

SELECT
    (SELECT COUNT(qui) FROM discussion WHERE qui = 1),
    (SELECT COUNT(qui) FROM discussion WHERE qui = 2)

Ce code renverra 2310|2856, par exemple.

À savoir que l'on peut enchaîner les COUNT tel que :

SELECT
    (SELECT COUNT() FROM xxx WHERE ...),
    (SELECT COUNT() FROM xxx WHERE ...),
    (SELECT COUNT() FROM xxx WHERE ...),
    (SELECT COUNT() FROM xxx WHERE ...),
    -- (...)
    (SELECT COUNT() FROM xxx WHERE ...)

PHP, code complet

// Base de données et la requête qui va bien
$db = new PDO('sqlite:database.sqlite');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM);

$req = $db->prepare(
    'SELECT
        (SELECT COUNT(qui) FROM discussion WHERE qui = 1),
        (SELECT COUNT(qui) FROM discussion WHERE qui = 2)
);
$req->execute();
$stats = current($req->fetchAll());

/*
print_r($stats);
Array
(
    [0] => 2310
    [1] => 2856
)
*/