Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Odejmowanie sum kolumn z dwóch różnych tabel
Forum PHP.pl > Forum > Bazy danych > MySQL
drager
Witam, mam taki problem
2 tabele o różnej liczbie rekordów; 1 tabela- wydano, 3 kolumny id(int), nr(varchar), materiał(int) i 2 tabela zrobiono 3 kolumny id(int), nr(varchar), części(int).
Relacja między tymi dwoma kolumnami to wydano.nr=zrobiono.nr. Jak odjąć sumę kolumny części od sumy kolumny materiał aby wartość zawracana
była poprawna arytmetycznie.
Kod:
SELECT SUM(wydano.material) - SUM(zrobiono.czesci) from material LEFT JOIN zrobiono ON material.nr=zrobiono.nr;
podaje wynik ale błędny.
Poproszę o pomoc.
Mchl
INNER JOIN
marlic
spróbuj tak:

  1. SELECT SUM(wydano.material) - SUM(COALESCE(zrobiono.czesci,0)) FROM material LEFT JOIN zrobiono ON material.nr=zrobiono.nr;
drager
ten sam błąd arytmetyczny jak w przypadku mojego zapytania.

próbowałem INNER zawraca taki zam błąd jak w przypadku LEFT JOIN. Wykonuje zapytanie ale podaje błędny wynik
Mchl
Mógłbyś wkleić przykładowe dane i wynik jakiego oczekujesz?
Być może musisz sobie zaemulować FULL OUTER JOIN (MySQL nie obsługuje tego natywnie więc trzeba połączyć LEFT JOIN i RIGHT JOIN)
drager
  1. CREATE TABLE `zrobiono` (`id` INT NOT NULL AUTO_INCREMENT ,`nr_grupy` VARCHAR( 20 ) NOT NULL ,`zrobione` INT( 4 ) NOT NULL , UNIQUE (
  2. `id`));


  1. CREATE TABLE `wydano` (`id` INT NOT NULL AUTO_INCREMENT ,`nr_grupy` VARCHAR( 20 ) NOT NULL ,`material` INT( 4 ) NOT NULL ,UNIQUE (
  2. `id`
  3. )


  1. INSERT INTO `zrobiono` ( `id` , `nr_grupy` , `zrobione` ) VALUES ('', 'a', '80');
  2. INSERT INTO `zrobiono` ( `id` , `nr_grupy` , `zrobione` ) VALUES ('', 'b', '60');
  3. INSERT INTO `zrobiono` ( `id` , `nr_grupy` , `zrobione` ) VALUES ('', 'c', '50');


  1. INSERT INTO `wydano` ( `id` , `nr_grupy` , `material` ) VALUES ('', 'a', '100');
  2. INSERT INTO `wydano` ( `id` , `nr_grupy` , `material` ) VALUES ('', 'b', '100');
  3. INSERT INTO `wydano` ( `id` , `nr_grupy` , `material` ) VALUES ('', 'c', '100');
  4. INSERT INTO `wydano` ( `id` , `nr_grupy` , `material` ) VALUES ('', 'a', '50');
  5. INSERT INTO `wydano` ( `id` , `nr_grupy` , `material` ) VALUES ('', 'c', '80');


Wydano 430, zrobiono 190 czyli sum(wydano.material) - sum(zrobiono.zrobione) powinno być 240.
  1. SELECT SUM(wydano.material) - SUM(zrobiono.zrobione) FROM wydano LEFT JOIKN zrobiono ON wydano.nr_grupy=zrobiono.nr_grupy

Źle liczy.
Mchl
No tak. Tutaj to złączenie nie ma żadnego sensu. Po prostu liczysz sumę w jednej tabeli, sumę w drugiej i odejmujesz

Kod
SELECT wydano.material - zrobiono.zrobione FROM
(SELECT SUM(material) AS material FROM wydano) AS wydano,
(SELECT SUM(zrobione) AS zrobione FROM zrobiono) AS zrobiono
drager
Zawraca błąd

#1064 - Something is wrong in your syntax obok 'SELECT SUM(material) AS material FROM wydano) AS wydano,
(SELEC' w linii 2

piotrdd2
  1. SELECT (SUM(wydano.material) - (SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wydano


wynik =240
drager
SELECT (SUM(wydano.material) - (SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wydano

zawraca również błąd;
#1064 - Something is wrong in your syntax obok 'SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wyda' w linii 1
piotrdd2
Cytat(drager @ 17.03.2010, 16:35:00 ) *
SELECT (SUM(wydano.material) - (SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wydano

zawraca również błąd;
#1064 - Something is wrong in your syntax obok 'SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wyda' w linii 1



coś sknociłeś, bo działa bez problemu.
Mchl
Która wersja MySQL?
drager
Wersja MySQL?

leciwa 3.23, może mieć wpływ?
icetique
Porównaj PHP3 i PHP5. Widać różnicę?winksmiley.jpg
Mchl
Kolejna ofiara Krasnala?

MySQL do wersji 4.1 nie obsługiwał podzapytań (a z tego tutaj korzystamy)

Poza tym już od ponad roku wersje 4.x nie są wspierane przez producenta. 3.x to po prostu archeologia.
drager
Zgadza się, wywalam to g.. i instaluję to co trzeba.

Pozdrawiam i dzięki.

SELECT (SUM(wydano.material) - (SELECT sum(zrobiono.zrobione) FROM zrobiono)) AS wynik FROM wydano


Zapytanie śmiga jak należy.
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.