sql >> Databasteknik >  >> RDS >> Mysql

Beräkna decil i MySQL baserat på totaler

Du kan beräkna decil i MySQL för att identifiera de bästa kunderna. I grund och botten rankar och grupperar du kunder i 10 grupper baserat på total försäljning. Baserat på resultatet kan du komma med mer fokuserade, relevanta retentionsinitiativ. Här är en färdig fråga för att göra det.

Beräkna decil i MySQL

Du har t.ex. bordsbeställningar som innehåller alla produktbeställningar för varje användare. Du vill beräkna decil i MySQL.

beställ+-----------+------------+----------+| user_id | produkt | försäljning |+-----------+------------+--------+| 1 | Tvål | 10 || 4 | Parfym | 100 || 1 | Nudlar | 20 || 3 | Deo | 200 |+------------+------------+---------+
deciler+------------+--------+--------+------------- --+| user_id | totalt | rang | decil |+-----------+-----------+--------+------------------- -+| 1 | 30 | 3 | 3 || 4 | 100 | 2 | 7 || 3 | 200 | 1 | 10 |+-----------+-----------+--------+------------------- -+

Här är en fråga du kan använda för att beräkna decil i MySQL baserat på totaler. Byt bara ut kolumnerna – user_id, sales och table – order. Den sammanställer den totala försäljningen för varje användare. Sedan rankar den dem på den totala försäljningen. Slutligen beräknar den decil med hjälp av rang.

välj user_id  ,total,rank,round(10*(cnt-rank+1)/cnt,0) som decil från (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (välj user_id  ,sum(försäljning  ) totalt från `order  ` grupp av user_id  )p, (SELECT @curRank :=0) rORDER BY total desc ) som dt,(select count(distinct user_id  ) som cnt från `order  `) som ct

Om du redan har total försäljning för varje användare i tabellen och vill använda tabellen direkt för att beräkna decil, här är en fråga

  1. Returnera resultat av en sql-fråga som JSON i oracle 12c

  2. SQL Server 2008 - Hur returnerar jag en användardefinierad tabelltyp från en tabellvärderad funktion?

  3. SQL Server:hur man imiterar Oracle Keep dense_rank-frågan?

  4. PostgreSQL, dra och byt