Obliczenie percentyla w MySQL może być trudne. Nie ma jeszcze do tego funkcji. Centyle są przydatne do oceniania i grupowania użytkowników lub klientów.
Możesz zidentyfikować swoich najcenniejszych użytkowników lub klientów i stworzyć dla nich specjalne oferty. Oto gotowe zapytanie, aby to zrobić.
Np. Masz stół zamówienia który zawiera wszystkie zamówienia produktów dla każdego użytkownika. Chcesz obliczyć percentyl.
percentyle+-----------+----------+------------+-------------- --+| identyfikator_użytkownika | łącznie | pozycja | percentyl |+-----------+----------+---------+--------------- -+| 1 | 30 | 3 | 33,33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+---------+--------------- -+
Oto zapytanie, którego możesz użyć do obliczenia percentyla w MySQL na podstawie sum. Wystarczy wymienić kolumny – user_id, sales oraz table – order. Agreguje całkowitą sprzedaż dla każdego użytkownika. Następnie klasyfikuje je pod względem łącznej sprzedaży. Na koniec oblicza percentyl na podstawie rangi.
wybierz identyfikator_użytkownika ,total,rank,round(100*(cnt-rank+1)/cnt,0) jako percentyl z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (wybierz user_id ,suma(sprzedaż ) jako całość z `zamówienia ` grupuj według identyfikator_użytkownika )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id ) jako cnt z`zamówienie `) jako ct
Jeśli masz już całkowitą sprzedaż dla każdego użytkownika w tabeli i chcesz bezpośrednio użyć tabeli do obliczenia percentyla, oto zapytanie
wybierz identyfikator_użytkownika ,total,rank,round(100*(cnt-rank+1)/cnt,0) jako percentyl z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `zamówienie` p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id ) jako cnt z`zamówienie `) jako ct
percentyle+-----------+----------+------------+-------------- --+| identyfikator_użytkownika | łącznie | pozycja | percentyl |+-----------+----------+---------+--------------- -+| 1 | 30 | 3 | 33,33 || 4 | 100 | 2 | 66,67 || 3 | 200 | 1 | 100 |+-----------+----------+---------+--------------- -+
Jak widać, ostatni w rankingu użytkownik nie ma zerowego percentyla. Taka jest natura obliczania percentyla. Albo pierwsza osoba może mieć 100 percentyl, albo ostatnia osoba w rankingu może mieć zero. Jedno i drugie nie może się zdarzyć w tym samym czasie. Jeśli chcesz zmusić ostatnią osobę w rankingu do zerowego percentyla, możesz użyć następujących zapytań. Nie dodaję 1 do rangi podczas obliczania percentyla.
wybierz identyfikator_użytkownika ,total,rank,round(100*(cnt-rank)/cnt,0) jako percentyl z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM (wybierz user_id ,suma(sprzedaż ) jako całość z `zamówienia ` grupuj według identyfikator_użytkownika )p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id ) jako cnt z`zamówienie `) jako ct
Jeśli masz już całkowitą sprzedaż dla każdego użytkownika w tabeli i chcesz bezpośrednio użyć tabeli do obliczenia percentyla, oto zapytanie
wybierz identyfikator_użytkownika ,total,rank,round(100*(cnt-rank)/cnt,0) jako percentyl z (SELECT user_id,total,@curRank :=@curRank + 1 AS rankFROM `zamówienie` p, (SELECT @curRank :=0) rORDER BY total desc ) as dt,(select count(distinct user_id ) jako cnt z`zamówienie `) jako ct
percentyle+-----------+----------+------------+-------------- --+| identyfikator_użytkownika | łącznie | pozycja | percentyl |+-----------+----------+---------+--------------- -+| 1 | 30 | 3 | 0 || 4 | 100 | 2 | 33,33 || 3 | 200 | 1 | 66,67 |+-----------+----------+---------+--------------- -+
SQL, aby utworzyć przykładową kolejność tabel: