Manchmal möchten Sie vielleicht das Dezil aus der Häufigkeit oder Anzahl in MySQL basierend auf berechnen. Zum Beispiel, um Kunden basierend auf der Anzahl der Käufe oder Bestellungen statt basierend auf dem Gesamtumsatz einzustufen
Dezil aus Häufigkeit berechnen
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 Dezil aus der Häufigkeit der Bestellungen berechnen.
order +------+--------------+-------------+ | user_id | product | sales | +-----------+------------+----------+ | 1 | Soap | 10 | | 4 | Perfume | 100 | | 1 | Noodles | 20 | | 4 | Soap | 10 | | 1 | Glue | 20 | | 3 | Deo | 200 | +-----------+------------+----------+
deciles +-----------+----------+---------+---------------+ | user_id | total | rank | decile | +-----------+----------+---------+---------------+ | 1 | 3 | 1 | 10 | | 4 | 2 | 2 | 7 | | 3 | 1 | 3 | 3 | +-----------+----------+---------+---------------+
Hier ist eine Abfrage, die Sie verwenden können, um das Dezil aus der Häufigkeit oder der Anzahl in MySQL zu berechnen. Ersetzen Sie einfach die Spalten – user_id, sales und table – order. Es zählt die Anzahl der Bestellungen für jeden Benutzer. Dann ordnet es sie nach der Anzahl der Bestellungen. Schließlich wird das Dezil anhand des Ranges berechnet.
select user_id,total,rank,round(10*(cnt-rank+1)/cnt,0) as decile from (SELECT user_id,total,@curRank := @curRank + 1 AS rank FROM (select user_id,count(sales) as total from `order` group by user_id) p, (SELECT @curRank := 0) r ORDER BY total desc ) as dt,(select count(distinct user_id) as cnt from `order`) as ct
Wenn Sie bereits die Anzahl der Bestellungen für jeden Benutzer in der Tabelle haben und die Tabelle direkt verwenden möchten, um das Dezil aus der Häufigkeit oder der Anzahl zu berechnen, ist hier eine Abfrage