Mysql
 sql >> Base de données >  >> RDS >> Mysql

Compter plusieurs lignes dans MySQL en une seule requête

SELECT item_id, operation, COUNT(*) 
FROM stats 
WHERE operation IN ('view','purchase','download') 
GROUP BY item_id, operation

Retournera un tableau avec une ligne par item_id et opération , contenant trois colonnes :l'item_id, le type d'opération et le nombre de lignes avec cet item_id.

1 view 3
1 purchase 5
2 download 7
3 download 1

Vous pouvez omettre WHERE si vous voulez tous les item_id, et vous pouvez commander en COUNT(*) pour obtenir le plus populaire ou quelque chose comme ça. Cela dépend de ce que vous recherchez ou de la manière dont vous utilisez les données.

Si vous voulez que les colonnes soient à côté les unes des autres , utilisez un SI :

SELECT s1.item_id, SUM( IF( s1.operation = 'view', 1, 0 ) ) views, SUM( IF( s1.operation = 'download', 1, 0 ) ) downloads, SUM( IF( s1.operation = 'purchase', 1, 0 ) ) purchases
FROM stats s1
GROUP BY s1.item_id

item_id | views | downloads | purchases
1 | 3 | 0 | 5
2 | 0 | 7 | 0
3 | 0 | 1 | 0