Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Sumowanie kolumny z sumami
Forum PHP.pl > Forum > Bazy danych > MySQL
lukas0987
Witam,
Walczę już z moim problemem 4h. Jesteście moją ostatnią deską ratunku smile.gif
Sprawa wygląda tak.
Mam zapytanie:
  1. SELECT `samochody`.`samochod_id` , SUM(`czesci`.`czesci_cena`) FROM samochody, czesci WHERE ((`samochod_data_sprzedazy` BETWEEN '2011-06-01' AND '2011-06-10') AND (`czesci`.`samochod_id` = `samochody`.`samochod_id`)) GROUP BY `samochody`.`samochod_id`


wynikiem mojego zapytania jest tabela:
samochod_id SUM(`czesci`.`czesci_cena`)
12 7695.44
14 6512.00
16 4468.00
20 9370.03
35 4381.00
36 3708.00

Jak zsumować wszystkie wyniki: SUM(`czesci`.`czesci_cena`)?

Próbowałem w ten sposób:
  1. SELECT SUM(SUM(`czesci`.`czesci_cena`)) FROM (SELECT `samochody`.`samochod_id` , SUM(`czesci`.`czesci_cena`) FROM samochody, czesci WHERE ((`samochod_data_sprzedazy` BETWEEN '2011-06-01' AND '2011-06-10') AND (`czesci`.`samochod_id` = `samochody`.`samochod_id`)) GROUP BY `samochody`.`samochod_id`)

Ale krzyczy błędy. Naturalnie próbowałem jeszcze sporo innych metod.
Jednak nie mogę sobie z tym poradzić. Proszę o pomoc i z góry dziękuję.
rollen
Cytat(lukas0987 @ 5.07.2011, 21:16:26 ) *
  1. SELECT `samochody`.`samochod_id` , SUM(`czesci`.`czesci_cena`) FROM samochody, czesci WHERE ((`samochod_data_sprzedazy` BETWEEN '2011-06-01' AND '2011-06-10') AND (`czesci`.`samochod_id` = `samochody`.`samochod_id`)) GROUP BY `samochody`.`samochod_id`


Tu sumujesz po pojedynczych samochodach...

Jeżeli próbujesz pobrać tylko sumę wszystkich części to proponuę bez grupowania:

  1. SELECT SUM(c.czesci_cena)
  2. FROM samochody s JOIN czesci c ON c.samochod_id = s.samochod_id
  3. WHERE s.samochod_data_sprzedazy BETWEEN '2011-06-01' AND '2011-06-10'


Tu sumujesz po wszystkich samochodach...

Ale jeżeli chcesz mieć bardziej egzoyczne i mniej wydajne zapytanie w stylu tego drugiego to:

  1. SELECT SUM(tmp.suma_cen_czesci) FROM (
  2. SELECT `samochody`.`samochod_id` , SUM(`czesci`.`czesci_cena`) FROM samochody, czesci WHERE ((`samochod_data_sprzedazy` BETWEEN '2011-06-01' AND '2011-06-10') AND (`czesci`.`samochod_id` = `samochody`.`samochod_id`)) GROUP BY `samochody`.`samochod_id`) tmp


Wyniki jednak będą identyczne...







lukas0987
Dokładnie o to chodziło. Wielkie dzięki za pomoc. Sam to bym chyba nie wpadł na to przez miesiąc. W ogóle w inną stronę szukałem.
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.