Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> max() w SQL
marvofmay
post
Post #1





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.08.2012

Ostrzeżenie: (10%)
X----


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`;


Ten post edytował marvofmay 14.11.2012, 10:00:43
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Możesz dać po prostu

  1. ... ORDER BY SUM( `o`.`order_price` ) DESC LIMIT 1


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
marvofmay
post
Post #3





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.08.2012

Ostrzeżenie: (10%)
X----


Ale ja chcę aby wypisał tylko jeden wiersz z maksymalną sumą zamówień
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #4





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


A może byś ruszył dupę i sprawdził?
Go to the top of the page
+Quote Post
marvofmay
post
Post #5





Grupa: Zarejestrowani
Postów: 14
Pomógł: 0
Dołączył: 21.08.2012

Ostrzeżenie: (10%)
X----


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()
Go to the top of the page
+Quote Post
mmmmmmm
post
Post #6





Grupa: Zarejestrowani
Postów: 1 421
Pomógł: 310
Dołączył: 18.04.2012

Ostrzeżenie: (0%)
-----


  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
Go to the top of the page
+Quote Post
Sephirus
post
Post #7





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 19.08.2025 - 19:57