sql >> Database teknologi >  >> RDS >> Mysql

Tæller flere rækker i MySQL i én forespørgsel

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

Returnerer en tabel med én linje pr. item_id og operation , der indeholder tre kolonner:item_id, operationstypen og antallet af rækker med det item_id.

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

Du kan udelade WHERE, hvis du vil have alle item_id's, og du kan bestille i COUNT(*) for at få den mest populære eller noget. Afhænger af, hvad du leder efter, eller hvordan du bruger dataene.

Hvis du vil have kolonnerne ved siden af ​​hinanden , brug 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. Sådan fungerer ROW_NUMBER() i SQL Server

  2. Hvorfor har kommandoer stadig ude af synkronisering; du kan ikke køre denne kommando nu fejl

  3. Hvordan indstiller man tilfældigt tekst til knapper fra SQLite uden gentagelser?

  4. I Oracle AS virker alias ikke