Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Różnica sum dwóch kolumn
Forum PHP.pl > Forum > Przedszkole
Therminus
Mam w PHP tabelę w której ma się wyświetlić różnica sum dwóch kolumn z tej samej tabeli bazy MySQL.
Był już podobny temat na tym forum, ale tam chodziło o różnicę sum dwóch kolumn z różnych tabel. Niestety, nie mogę sobie z tym poradzić aby dopasować to do swojego przypadku.
A zapytania które sumują mam takie:
  1. $suma_br_210_1 = "SELECT SUM(Pow_Uzyt) as sum_br_210_1 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";
  2. $suma_br_210_6 = "SELECT SUM(Pow_Uzyt_IF) as sum_br_210_6 FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'";


Te sumy wyświetlają mi się prawidłowo. Teraz chodzi o to, aby stworzyć takie zapytanie MySQL którego wynikiem będzie różnica tych dwóch sum.
nospor
A nie mozesz w php odjac od siebie tych dwoch wartosci? Od tak poprostu...

Jesli nie mozesz bo cos tam, to..:
SELECT SUM(Pow_Uzyt) - SUM(Pow_Uzyt_IF) FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'
mmmmmmm
  1. SELECT Coalesce(SUM(Pow_Uzyt),0) - Coalesce(SUM(Pow_Uzyt_IF),0) FROM `broniewskiego_2-10` WHERE `Kategoria` = 'M'
Therminus
Cytat(nospor @ 1.07.2015, 23:22:48 ) *
A nie mozesz w php odjac od siebie tych dwoch wartosci? Od tak poprostu...


Może i mogę, ale tego nie wiem (przedszkole wszak).
Ta tabelka, którą generuję kodem PHP jest dość skomplikowana. Może dlatego, że niepotrzebnie ją pokomplikowałem? smile.gif
Każdy wiersz to:
1. kilka kolumn wyciągnięte z tabeli MySQL `dzialki`
2. następne kolumny to obliczenia z sum zawartości innej tabeli, różnej dla każdego wiersza. A tych tabel jest około setki(!).

Cytat(nospor)
Jesli nie mozesz bo cos tam, to..:
SELECT SUM(Pow_Uzyt) - SUM(Pow_Uzyt_IF) FROM `broniewskiego_2-10` WHERE `Kategoria` LIKE 'M'

No tak, to było proste do bólu. Ale dlaczego na to nie wpadłem? Bo kombinowałem inaczej. Przykład który podałem okazał się być nieszczęśliwie zbyt prosty. Otóż "WHERE `Kategoria` LIKE 'coś-tam'" w innych przypadkach będzie różne dla poszczególnych składników sumy, czy różnicy.
Na przykład cos takiego jak poniżej. To oczywiście nie działa, ale może jakoś przystepnie zilustruje o co mi chodzi.

CODE
  1. SELECT SUM((Pow_Uzyt_IF) WHERE `Kategoria` LIKE 'M' + SUM(Pow_Uzyt_IF) WHERE `Kategoria` LIKE 'LU%' + SUM(Pow_Przynal_IF)) / (SUM(Pow_Uzyt) WHERE `Kategoria` LIKE 'M'" + SUM(Pow_przynal_zalicz) + SUM(Pow_Uzyt) WHERE `Kategoria` LIKE 'LU%') FROM `broniewskiego_65-81`;


A jeśli ktoś chciałby ogarnąć przynajmniej fragment większej całości, to mogę zapodać gotowca do wyświetlenia w przeglądarce i jakiś dump z części bazy. Przy okazji okaże się jak nie należy pisać w php i tworzyć tabel w bazie. tongue.gif
nospor
Cytat
Może i mogę, ale tego nie wiem (przedszkole wszak).
Ta tabelka, którą generuję kodem PHP jest dość skomplikowana. Może dlatego, że niepotrzebnie ją pokomplikowałem?

Skoro masz dwie wartosci, ktore wyswietlasz na ekran w php, to i bez zadnego problemu mozesz te dwie wartosci od siebie odjac a wynik wyswietlic na ekran.

Skoro masz:
echo $w1;
echo $w2;

to rownie dobrze mozesz zrobic
echo ($w1 - $w2);

Gdzie tu magia?
mmmmmmm
  1. SELECT
  2. (
  3. Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt_IF` end),0)
  4. +
  5. Coalesce(SUM(case when `Kategoria` LIKE 'LU%' then `Pow_Uzyt_IF` end),0)
  6. +
  7. Coalesce(SUM(Pow_Przynal_IF),0)
  8. )
  9. /
  10. (
  11. Coalesce(SUM(case when `Kategoria` LIKE 'M' then `Pow_Uzyt` end),0)
  12. +
  13. Coalesce(SUM(Pow_przynal_zalicz),0)
  14. +
  15. Coalesce(SUM(case when `Kategoria` LIKE 'LU%' then `Pow_Uzyt` end),0)
  16. )
  17. FROM `broniewskiego_65-81`;
Therminus
Cytat(mmmmmmm @ 2.07.2015, 14:47:41 ) *

A, to tędy droga. Muszę poczytać o tym "Coalesce".
Dzięki bardzo.

Cytat(nospor @ 2.07.2015, 13:57:46 ) *

Skoro masz:
echo $w1;
echo $w2;

to rownie dobrze mozesz zrobic
echo ($w1 - $w2);

Gdzie tu magia?

Próbowałem tej sztuki, ale jakoś mi nie wychodziło. Chyba to, że to wyrażenie umieszcza się pomiędzy znacznikami <td></td> nie ma znaczenia?
mmmmmmm
To nie o Coalesce cvhodzi, tylko o CASE WHEN...
Coalesce podaje tylko pierwszą nie-Nullową wartość. Dla SUM taka może się zdarzyć...
nospor
Cytat
Chyba to, że to wyrażenie umieszcza się pomiędzy znacznikami <td></td> nie ma znaczenia?
Nie, nie ma znaczenia... ja ci tylko podalem przyklad. Logiczne, ze u CIebie to wyglada inaczej. Przeciez ja nie wiem jak to wyglada u CIebie. Nie pokazales kodu.
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.