sql >> Databáze >  >> RDS >> Mysql

Vypočítejte percentil v MySQL na základě součtů

Počítat percentil v MySQL může být nepříjemné. Zatím pro něj nejsou žádné funkce. Percentily jsou užitečné k hodnocení a seskupování uživatelů nebo zákazníků.

Můžete identifikovat své nejcennější uživatele nebo zákazníky a vytvářet pro ně speciální nabídky. Zde je připravený dotaz, jak to udělat.

Např. máte tabulku objednávky který obsahuje všechny objednávky produktů pro každého uživatele. Chcete vypočítat percentil.

percentily+-----------+----------+---------+------------- --+| user_id | celkem | hodnost | percentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 33,33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+---------+--------------- -+

Zde je dotaz, který můžete použít k výpočtu percentilu v MySQL na základě součtů. Stačí nahradit sloupce – user_id, sales a table – order. Agreguje celkové prodeje pro každého uživatele. Poté je seřadí podle celkových prodejů. Nakonec vypočítá percentil pomocí hodnocení.

vyberte user_id  ,total,rank,round(100*(cnt-rank+1)/cnt,0) jako percentil z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (vyberte user_id  ,součet(prodej  ) jako součet z `objednávky  ` seskupit podle user_id  )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct

Pokud již máte celkové prodeje pro každého uživatele v tabulce a chcete přímo použít tabulku k výpočtu percentilu, zde je dotaz

vyberte user_id  ,total,rank,round(100*(cnt-rank+1)/cnt,0) jako percentil z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `pořadí`  p, (SELECT @curRank :=0) rORDER BY total desc ) jako dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct
percentily+-----------+----------+---------+------------- --+| user_id | celkem | hodnost | percentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 33,33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+---------+--------------- -+

Jak vidíte, poslední hodnocený uživatel nemá nulový percentil. To je povaha výpočtu percentilu. Buď první osoba může mít 100 percentil, nebo poslední hodnocená může mít nulu. Obojí se nemůže stát současně. Pokud chcete přinutit poslední hodnocenou osobu, aby měla nulový percentil, můžete použít následující dotazy. Při výpočtu percentilu nepřidávám 1 k hodnocení.

vyberte user_id  ,total,rank,round(100*(cnt-rank)/cnt,0) jako percentil z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (vyberte user_id  ,součet(prodej  ) jako součet z `objednávky  ` seskupit podle user_id  )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct

Pokud již máte celkové prodeje pro každého uživatele v tabulce a chcete přímo použít tabulku k výpočtu percentilu, zde je dotaz

vyberte user_id  ,total,rank,round(100*(cnt-rank)/cnt,0) jako percentil z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `pořadí`  p, (SELECT @curRank :=0) rORDER BY total desc ) jako dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct
percentily+-----------+----------+---------+------------- --+| user_id | celkem | hodnost | percentil |+-----------+----------+---------+-------------- -+| 1 | 30 | 3 | 0 || 4 | 100 | 2 | 33,33 || 3 | 200 | 1 | 66,67 |+-----------+----------+---------+--------------- -+

SQL pro vytvoření ukázkové objednávky tabulky:

  1. Jak mohu použít mysqli_fetch_array() dvakrát?

  2. 2 způsoby, jak vrátit řádky, které obsahují pouze alfanumerické znaky v PostgreSQL

  3. jak zkontrolovat typ hodnoty v postgresu

  4. Podmnožina databáze – Jak na to v IRI Voracity