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?
2 odpowiedzi
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.
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;
Podobne pytania
Nowe pytania
postgresql
PostgreSQL to system zarządzania relacyjnymi bazami danych typu open source (RDBMS) dostępny dla wszystkich głównych platform, w tym Linux, UNIX, Windows i OS X. Podczas zadawania pytań prosimy o podanie swojej wersji Postgres. Pytania dotyczące administracji lub zaawansowanych funkcji najlepiej kierować na dba.stackexchange.com.