Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: max() w SQL
Forum PHP.pl > Forum > Bazy danych > MySQL
marvofmay
Witam.
Poniższe zapytanie sumuje zawartość komórki "order_price" poszczególnych osób (kwoty zamówień poszczególnych osób. Jak zmienić poniższe zapytanie tak, aby otrzymać dane osoby , która ma największą sumę 'order_price' (osoba, która wydała najwięcej za wszystkie swoje zamówienia )

  1. SELECT CONCAT_WS( ' ', `p`.`lname` , `p`.`fname` ) AS `osoba` , SUM( `o`.`order_price` ) AS `suma wartości zamówień`
  2. FROM `person` AS `p`
  3. INNER JOIN `order` AS `o` ON `p`.`id` = `o`.`person_id`
  4. GROUP BY `o`.`person_id`;
Sephirus
Możesz dać po prostu

  1. ... ORDER BY SUM( `o`.`order_price` ) DESC LIMIT 1
marvofmay
Ale ja chcę aby wypisał tylko jeden wiersz z maksymalną sumą zamówień
mmmmmmm
A może byś ruszył dupę i sprawdził?
marvofmay
Koleś, to że jest "limit 1" to wiem, że to jeden wiersz ale samo zapytanie generuje wszystkie wiersze. Tak więc nie ciskaj się. Jak jesteś taki mądry , to powiedz jak użyć funkcji max()
mmmmmmm
  1. SELECT * FROM person p JOIN (SELECT person_id, Sum(`order_price`) suma FROM `order` GROUP BY person_id HAVING SUM(`order_price`)=(SELECT Max(suma) FROM (SELECT SUM(`order_price` ) AS `suma` FROM `order` GROUP BY `person_id`))) sub ON sub.person_id=p.id

Jak widać z użyciem LIMIT jest dużo łatwiejsze
Sephirus
Seriously... Limit jest wbrew pozorom najprostszym i najlepszym rozwiązaniem... dlaczego? Dlatego, że używając w jakikolwiek sposób MAX i SUM razem powodujesz wygenerowanie tabeli pośredniej, do której trafią wszystkie wiersze z sumami. Potem zostanie z nich wybrany ten z maksymalną sumą. ORDER zadziała szybciej - nie wierzysz - sprawdź wink.gif Wiem co mówię smile.gif
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.