Czasami możesz chcieć obliczyć percentyl na podstawie ostatnich w MySQL. Np. aby uszeregować klientów na podstawie ostatnich zakupów lub zamówień zamiast całkowitej sprzedaży. Pomaga to tworzyć specjalne oferty dla osób, które niedawno kupiły coś w Twojej witrynie. Nie ma jeszcze do tego funkcji. 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 na podstawie ostatnich zamówień.
percentyle+-----------+-----+-------------+----------- --------+| identyfikator_użytkownika | najnowszy | pozycja | percentyl |+-----------+----------------+---------+------------ -------+| 1 | 2013-11-20 | 1 | 100 || 4 | 2013-11-11 | 2 | 66,67 || 3 | 2013-10-20 | 3 | 33,33 |+-----------+----------------+---------+--------- -------+
Oto zapytanie, którego możesz użyć do obliczenia percentyla na podstawie ostatnich czasów w MySQL. Wystarczy zamienić kolumny – user_id, purchase_date i table – order. Pobiera najnowszą datę zakupu każdego użytkownika. Następnie klasyfikuje je według najpóźniejszej daty zakupu. Na koniec oblicza percentyl na podstawie rangi.
wybierz identyfikator_użytkownika ,latest,rank,round(100*(cnt-rank+1)/cnt,0) jako percentyl z (SELECT user_id,latest,@curRank :=@curRank + 1 AS rankFROM (wybierz user_id ,max(data_zakupu ) najpóźniej z `zamówienia ` grupuj według identyfikator_użytkownika )p, (SELECT @curRank :=0) rORDER BY najnowszy opis ) as dt,(select count(distinct user_id ) jako cnt z`zamówienie `) jako ct
Jeśli masz już ostatnią datę zakupu dla każdego użytkownika w tabeli i chcesz bezpośrednio użyć tabeli do obliczenia percentyla na podstawie ostatnich zakupów, oto zapytanie
wybierz identyfikator_użytkownika ,data_zakupu,rank,round(100*(cnt-rank+1)/cnt,0) jako percentyl z (SELECT user_id,purchase_date,@curRank :=@curRank + 1 AS rankFROM `zamówienie` p, (SELECT @curRank :=0) rORDER BY data_zakupu desc ) as dt,(wybierz count(distinct identyfikator_użytkownika ) jako cnt z`zamówienie `) jako ct
percentyle+-----------+-----+-------------+----------- --------+| identyfikator_użytkownika | data_zakupu| pozycja | percentyl |+-----------+----------------+---------+------------ -------+| 1 | 2013-11-20 | 1 | 100 || 4 | 2013-11-11 | 2 | 66,67 || 3 | 2013-10-20 | 3 | 33,33 |+-----------+----------------+---------+--------- -------+
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 ,hrabia(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
centyle
+-----------+----------------+---------+----------- --------+| identyfikator_użytkownika | data_zakupu| pozycja | percentyl |+-----------+----------------+---------+------------ -------+| 1 | 2013-11-20 | 1 | 66,67 || 4 | 2013-11-11 | 2 | 33,33 || 3 | 2013-10-20 | 3 | 0 |+-----------+----------------+---------+------------ -------+
SQL, aby utworzyć przykładową kolejność tabel: