Chciałbym dowiedzieć się, że maksymalna liczba opcji stawek w danym miesiącu dla każdego z moich użytkowników. Oto, jak wygląda mój stawka:

Member  | Month     |   Rate
Joe     | Jan       |   1
Joe     | Jan       |   2
Joe     | Jan       |   3
Joe     | Feb       |   1
Joe     | Feb       |   2
Joe     | Feb       |   2
Joe     | Mar       |   1
Joe     | Mar       |   2
Joe     | Mar       |   2
Max     | Jan       |   1
Max     | Jan       |   1
Max     | Jan       |   1
Max     | Feb       |   2
Max     | Feb       |   2
Max     | Feb       |   2
Max     | Mar       |   3
Max     | Mar       |   3
Max     | Mar       |   3
Ben     | Jan       |   1
Ben     | Jan       |   2
Ben     | Jan       |   2
Ben     | Feb       |   1
Ben     | Feb       |   1
Ben     | Feb       |   1
Ben     | Mar       |   1
Ben     | Mar       |   1
Ben     | Mar       |   1

Joe, w styczniu ma opcje oceny [1,2,3] dostępne dla niego. Joe, w lutym i marcu, ma tylko dwa [1,2]. Dla każdego użytkownika chciałbym wyświetlić maksymalną liczbę stawek dostępnych w ciągu jednego miesiąca (w porównaniu przez wszystkie miesiące). Tabela wyników powinna wyglądać tak:

Member | Max rates in one month
Joe    | 3
Max    | 1
Ben    | 2

Jak napisałbym to zapytanie?

0
superdee73 16 marzec 2020, 21:43

2 odpowiedzi

Najlepsza odpowiedź

Po pierwsze, musisz grupować członków i miesiąc i policzyć stawki:

SELECT "Member", "Month", count(*) AS n FROM rates GROUP BY 1,2;

Teraz, gdy masz liczbę stawek na jeden członek na miesiąc, możesz użyć wyniku, aby wyodrębnić maksymalną wartość dla każdego członka:

SELECT "Member", max(n) FROM (
    SELECT "Member", "Month", count(*) AS n FROM rates GROUP BY 1,2) X
 GROUP BY "Member";

Są inne metody, na przykład, na przykład, funkcje okien, ale pomysł jest zawsze taki sam i myślę, że powyższy kod wyjaśnia, co się dzieje.

0
fog 16 marzec 2020, 18:58

Możesz to zrobić z pewną agregacją:

SELECT Member, MAX(rate_count) as "Max rates in one month"
FROM 
    (SELECT Member, Month, COUNT(DISTINCT RATE) rate_count FROM yourtable GROUP BY Member, Month) dt
GROUP BY Member;
0
JNevill 16 marzec 2020, 18:54