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

Berechnen Sie das Perzentil aus der Aktualität in MySQL

Manchmal möchten Sie vielleicht das Perzentil aus der Neuheit in MySQL basierend auf berechnen. Zum Beispiel, um Kunden basierend auf der Neuheit von Käufen oder Bestellungen statt des Gesamtumsatzes einzustufen. Dies hilft bei der Erstellung von Sonderangeboten für Personen, die kürzlich etwas auf Ihrer Website gekauft haben. Es gibt noch keine Funktionen dafür. 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 aus der Neuheit von Bestellungen berechnen.

Perzentile+-----------+----------------+---------+------- --------+| Benutzer-ID | neueste | Rang | Perzentil |+-----------+----------------+---------+-------- -------+| 1 | 2013-11-20 | 1 | 100 || 4 | 2013-11-11 | 2 | 66,67 || 3 | 2013-10-20 | 3 | 33.33 |+-----------+---------------+---------+-------- -------+

Hier ist eine Abfrage, die Sie verwenden können, um das Perzentil aus der Aktualität in MySQL zu berechnen. Ersetzen Sie einfach die Spalten – user_id, purchase_date und table – order. Dabei erhält jeder Nutzer das späteste Kaufdatum. Dann ordnet es sie nach dem letzten Kaufdatum ein. Schließlich wird das Perzentil anhand des Rangs berechnet.

wählen Sie user_id aus  ,latest,rank,round(100*(cnt-rank+1)/cnt,0) als Perzentil von (SELECT user_id,latest,@curRank :=@curRank + 1 AS rankFROM (select user_id  ,max(Kaufdatum  ) spätestens ab `Bestellung  ` nach user_id gruppieren  )p, (SELECT @curRank :=0) rORDER BY Latest Desc ) as dt,(select count(distinct user_id  ) als cnt from`order  `) als ct

Wenn Sie bereits das letzte Kaufdatum für jeden Benutzer in der Tabelle haben und die Tabelle direkt verwenden möchten, um das Perzentil aus der Neuheit des Kaufs zu berechnen, ist hier eine Abfrage

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

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  ,count(Verkäufe  ) 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 | Kaufdatum| Rang | Perzentil |+-----------+----------------+---------+-------- -------+| 1 | 2013-11-20 | 1 | 66,67 || 4 | 2013-11-11 | 2 | 33.33 || 3 | 2013-10-20 | 3 | 0 |+-----------+----------------+---------+-------- -------+

SQL zum Erstellen der Beispieltabellenreihenfolge: