Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Berechnen Sie das Perzentil in MySQL basierend auf Gesamtsummen

Es kann mühsam sein, das Perzentil in MySQL zu berechnen. Es gibt noch keine Funktionen dafür. Perzentile sind nützlich, um Benutzer oder Kunden einzustufen und zu gruppieren.

Sie können Ihre wertvollsten Benutzer oder Kunden identifizieren und spezielle Angebote für sie erstellen. Hier ist eine fertige Abfrage dafür.

Beispiel:Sie haben einen Tisch Bestellungen die alle Produktbestellungen für jeden Benutzer enthält. Sie möchten das Perzentil berechnen.

order+-----------+------------+----------+| Benutzer-ID | Produkt | Verkäufe |+-----------+------------+----------+| 1 | Seife | 10 || 4 | Parfüm | 100 || 1 | Nudeln | 20 || 3 | Deo | 200 |+-----------+------------+----------+
Perzentile+-----------+----------+---------+------------- --+| Benutzer-ID | insgesamt | Rang | Perzentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 33.33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+-----------------+-------------- -+

Hier ist eine Abfrage, die Sie verwenden können, um das Perzentil in MySQL basierend auf Gesamtsummen zu berechnen. Ersetzen Sie einfach die Spalten – user_id, sales und table – order. Es aggregiert die Gesamtverkäufe für jeden Benutzer. Dann ordnet es sie nach Gesamtumsatz. Schließlich wird das Perzentil anhand des Rangs berechnet.

wählen Sie user_id aus  ,total,rank,round(100*(cnt-rank+1)/cnt,0) als Perzentil von (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (select user_id  ,sum(Umsatz  ) als Summe aus `Bestellung  ` nach user_id gruppieren  )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) als cnt from`order  `) als ct

Wenn Sie bereits Gesamtverkäufe für jeden Benutzer in der Tabelle haben und die Tabelle direkt zur Berechnung des Perzentils verwenden möchten, ist hier eine Abfrage

wählen Sie user_id aus  ,total,rank,round(100*(cnt-rank+1)/cnt,0) als Perzentil von (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `order`  p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) als cnt from`order  `) als ct
Perzentile+-----------+----------+---------+------------- --+| Benutzer-ID | insgesamt | Rang | Perzentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 33.33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+-----------------+-------------- -+

Wie Sie sehen können, hat der zuletzt eingestufte Benutzer kein Nullperzentil. Dies ist die Art der Perzentilberechnung. Entweder die erste Person kann 100 Perzentil haben oder die letzte Person kann null haben. Beides kann nicht gleichzeitig passieren. Wenn Sie die letzte eingestufte Person zwingen möchten, ein Nullperzentil zu haben, können Sie die folgenden Abfragen verwenden. Ich füge beim Berechnen des Perzentils keine 1 zum Rang hinzu.

wählen Sie user_id aus  ,total,rank,round(100*(cnt-rank)/cnt,0) als Perzentil von (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (select user_id  ,sum(Umsatz  ) als Summe aus `Bestellung  ` nach user_id gruppieren  )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) als cnt from`order  `) als ct

Wenn Sie bereits Gesamtverkäufe für jeden Benutzer in der Tabelle haben und die Tabelle direkt zur Berechnung des Perzentils verwenden möchten, ist hier eine Abfrage

wählen Sie user_id aus  ,total,rank,round(100*(cnt-rank)/cnt,0) als Perzentil von (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `order`  p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) als cnt from`order  `) als ct
Perzentile+-----------+----------+---------+------------- --+| Benutzer-ID | insgesamt | Rang | Perzentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 0 || 4 | 100 | 2 | 33.33 || 3 | 200 | 1 | 66,67 |+-----------+----------+---------+-------------- -+

SQL zum Erstellen der Beispieltabellenreihenfolge: