Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Contando várias linhas no MySQL em uma consulta

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

Retornará uma tabela com uma linha por item_id e operação , contendo três colunas:o item_id, o tipo de operação e o número de linhas com esse item_id.
1 view 3
1 purchase 5
2 download 7
3 download 1

Você pode omitir o WHERE se quiser todos os itens_id's, e você pode pedir em COUNT(*) para obter o mais popular ou algo assim. Depende do que você está procurando ou como você está usando os dados.

Se você quiser as colunas próximas umas das outras , use um IF:
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