2011-09-25 11 views
5

Mam bazę danych tak:MySQL znaleźć tryb wielu podzbiorów

custNum   date  purchase  dayOfWeek 
    333   2001-01-01 23.23   1 
    333   2001-03-04 34.56   5 
    345   2008-02-02 22.55   3 
    345   2008-04-05 12.35   6 
    ...   ...   ...   ... 

Próbuję uzyskać tryb (większość wartości często występujących) dla kolumny DAYOFWEEK dla każdego klienta. Zasadniczo byłby to dzień tygodnia, w którym każdy klient najczęściej robi zakupy. Na przykład:

custNum   max(count(dayofweek(date))) 
333     5 
345     3 
356     2 
388     7 
...     ... 

Każda pomoc będzie wspaniała dzięki.

+0

Jak rozpoznać zakup - jaki jest Twój klucz podstawowy? Czy istnieje pole "purchaseId", którego nam nie pokazałeś? –

+0

nie, to jest cała db. – screechOwl

+0

Więc co to jest PK? Czy to {custNum, date}? Jeśli tak, to w jaki sposób można rozróżnić dwa zakupy tego samego użytkownika, które mają miejsce w tym samym dniu? Czy po prostu sumujesz je w tym samym rzędzie? –

Odpowiedz

3
select custNum, dayOfWeek 
from tableName t 
group by custNum, dayOfWeek 
having dayOfWeek = (
    select dayOfWeek 
    from tableName 
    where custNum = t.custNum 
    group by dayOfWeek 
    order by count(*) desc, dayOfWeek 
    limit 1 
)