Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: MAX() i SUM() w jednym zapytaniu
Forum PHP.pl > Forum > Bazy danych > MySQL
TheTester
Witam.

Potrzebuję małej porady odnośnie zsumowania maksymalnych wyników.
Przykład:
Tabela posiada różne wyniki różnych zagadek dla różnych użytkowników. Jeden użytkownik może mieć więcej niż jeden wynik dla tej samej zagadki.
Jak pobrać sumę najwyższych wyników ze wszystkich zagadek dla konkretnego użytkownika?

Gdybym chciał to przedstawić w postaci obrazowego kodu, to byłoby to coś w tym stylu:
  1. SELECT SUM(SELECT MAX(wynik) FROM punkty WHERE uzytkownik=1) FROM punkty WHERE uzytkownik=1
kreciko
Robienie tego w samym sql jest jak mycie rąk w pisuarze. Można, ale jest niewygodnie. Lepiej to zrobić programowo sobie w jakimś php. Musisz użyć podzapytania(IN)
TheTester
Wiem, że mógłbym w zrobić to w PHP, ale wtedy straciłbym możliwość m.in. sortowania...doszedłem póki co do czegoś takiego:
  1. SELECT SUM(mx) FROM (SELECT MAX(wynik) AS mx FROM punkty WHERE uzytkownik=1 GROUP BY zagadka) AS noname

I takie zapytanie zwraca poprawny wynik, ale stanowi problem dla sytuacji gdy chciałbym pobrać listę użytkowników, którzy byli najlepsi, czyli coś takiego jak:
  1. SELECT u.imie, (SELECT SUM(mx) FROM (SELECT MAX(wynik) AS mx FROM punkty WHERE uzytkownik=u.id GROUP BY zagadka) AS noname) AS maxwynik FROM punkty p, uzytkownicy u WHERE u.id=p.uzytkownik ORDER BY maxwynik DESC
kreciko
Cytat(TheTester @ 24.09.2010, 13:47:52 ) *
Wiem, że mógłbym w zrobić to w PHP, ale wtedy straciłbym możliwość m.in. sortowania...


Jakiegoś dziwnego PHP używasz.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.