sql >> Databasteknik >  >> RDS >> Mysql

Räknar flera rader i MySQL i en fråga

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

Returnerar en tabell med en rad per item_id och operation , som innehåller tre kolumner:item_id, operationstypen och antalet rader med det item_id.

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

Du kan utelämna WHERE om du vill ha alla item_id, och du kan beställa i COUNT(*) för att få den mest populära eller något. Beror på vad du letar efter eller hur du använder data.

Om du vill ha kolumnerna bredvid varandra , använd en 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



  1. Problem med teckenuppsättningskodning

  2. Hur söker man efter snedstreck (\) i MySQL? och varför escape (\) krävs inte för var (=) men för Like krävs?

  3. Varför får jag JPEG-fel 42 när det lagras i en databas?

  4. Hur man distribuerar lokal MySQL-databas till Heroku