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

Vypočítejte percentil z aktuálnosti v MySQL

Někdy můžete chtít vypočítat percentil z aktuálnosti v MySQL na základě. Např. seřadit zákazníky podle aktuálnosti nákupů nebo objednávek namísto celkového prodeje. To pomáhá vytvářet speciální nabídky pro lidi, kteří si nedávno něco koupili na vašem webu. Zatím pro něj nejsou žádné funkce. 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 z aktuálnosti objednávek.

percentily+-----------+----------------+---------+-------- --------+| user_id | nejnovější | hodnost | percentil |+-----------+---------------+---------+-------- -------+| 1 | 2013-11-20 | 1 | 100 || 4 | 2013-11-11 | 2 | 66,67 || 3 | 2013-10-20 | 3 | 33,33 |+-----------+----------------+---------+--------- -------+

Zde je dotaz, který můžete použít k výpočtu percentilu z aktuálnosti v MySQL. Stačí nahradit sloupce – user_id, purchase_date a table – order. Každý uživatel získá nejnovější datum nákupu. Poté je seřadí podle posledního data nákupu. Nakonec vypočítá percentil pomocí hodnocení.

vyberte user_id  ,latest,rank,round(100*(cnt-rank+1)/cnt,0) jako percentil z (SELECT user_id,latest,@curRank :=@curRank + 1 AS rankFROM (vyberte user_id  ,max(datum_nákupu  ) nejpozději z `objednávky  ` seskupit podle user_id  )p, (SELECT @curRank :=0) rORDER BY last desc ) as dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct

Pokud již máte pro každého uživatele v tabulce poslední datum nákupu a chcete přímo použít tabulku k výpočtu percentilu z aktuálnosti nákupu, zde je dotaz

vyberte user_id  ,purchase_date,rank,round(100*(cnt-rank+1)/cnt,0) jako percentil z (SELECT user_id,purchase_date,@curRank :=@curRank + 1 AS rankFROM `order`  p, (SELECT @curRank :=0) rORDER BY purchase_date desc ) jako dt,(select count(distinct user_id  ) jako cnt z`objednávky  `) jako ct
percentily+-----------+----------------+---------+-------- --------+| user_id | datum_nákupu| hodnost | percentil |+-----------+---------------+---------+-------- -------+| 1 | 2013-11-20 | 1 | 100 || 4 | 2013-11-11 | 2 | 66,67 || 3 | 2013-10-20 | 3 | 33,33 |+-----------+----------------+---------+--------- -------+

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  ,count(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 | datum_nákupu| hodnost | percentil |+-----------+---------------+---------+-------- -------+| 1 | 2013-11-20 | 1 | 66,67 || 4 | 2013-11-11 | 2 | 33,33 || 3 | 2013-10-20 | 3 | 0 |+-----------+----------------+---------+-------- -------+

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

  1. Jak ověřit e-mailovou adresu pomocí PL/SQL?

  2. Představujeme novou funkci – Spotlight Cloud Replication

  3. Vyberte řádky, které nejsou přítomny v jiné tabulce

  4. Prodleva Oracle mezi potvrzením a výběrem