Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SUM źle liczy?
Forum PHP.pl > Forum > Bazy danych > MySQL
mihmih
witam,

mam zapytanie z funkcją UNION, które zlicza mi pola do uzupełnienia w różnych tabelach, sumuje je a potem grupuje po użytkowniku który dodał dany rekord wymagający uzupełnienia.


  1. SELECT ktodod, , SUM(ile) FROM(
  2.  
  3.  
  4.  
  5. SELECT CASE WHEN `pozycje_zakupowe`.`waga_pozycji` IS NULL THEN `pozycje_zakupowe`.`kto_dodal` ELSE `zakupy`.`kto_dodal` END AS `ktodod`, COUNT( CASE WHEN `pozycje_zakupowe`.`waga_pozycji` IS NULL THEN `pozycje_zakupowe`.`kto_dodal` ELSE `pozycje_zakupowe`.`kto_dodal` END ) AS ile FROM { oj `firma`.`pozycje_zakupowe` AS `pozycje_zakupowe` LEFT OUTER JOIN `firma`.`gatunki_materialow` AS `gatunki_materialow` ON `pozycje_zakupowe`.`ID_materialu` = `gatunki_materialow`.`ID_gatunku_materialu` }, `firma`.`listy_zakupowe` AS `listy_zakupowe`, `firma`.`zakupy` AS `zakupy`, `firma`.`rodzaje_pozycji_zakupowych` AS `rodzaje_pozycji_zakupowych`, `firma`.`zamawiajacy` AS `zamawiajacy` WHERE `listy_zakupowe`.`ID_pozyji_zakupowej` = `pozycje_zakupowe`.`ID_poz_zakupowej` AND `listy_zakupowe`.`ID_zakupow` = `zakupy`.`ID_zakupu` AND `pozycje_zakupowe`.`ID_rodzaju_poz_zak` = `rodzaje_pozycji_zakupowych`.`ID_rodzaju_pozycji_zakupowej` AND `zakupy`.`ID_sprzedajacego` = `zamawiajacy`.`ID_zamawiajacego` AND ( ( `pozycje_zakupowe`.`waga_pozycji` IS NULL AND `rodzaje_pozycji_zakupowych`.`ID_asortyment` = 1 ) OR `listy_zakupowe`.`ilosc_zakupy` IS NULL OR `listy_zakupowe`.`cena_pozycji` IS NULL ) GROUP BY `ktodod`
  6.  
  7.  
  8. UNION
  9.  
  10.  
  11. SELECT `wyroby4`.`kto_dodal`, COUNT( `wyroby4`.`kto_dodal`) FROM `firma`.`pozycje_zamowieniowe` AS `pozycje_zamowieniowe`, `firma`.`wyroby4` AS `wyroby4`, `firma`.`zamowienia` AS `zamowienia`, `firma`.`zamawiajacy` AS `zamawiajacy`, `firma`.`widok_aktualne_ceny2` AS `widok_aktualne_ceny2` WHERE `pozycje_zamowieniowe`.`ID_wyrobu` = `wyroby4`.`ID_wyrobu` AND `pozycje_zamowieniowe`.`ID_zamowienia` = `zamowienia`.`ID_zamowienia` AND `zamowienia`.`ID_zamawiajacego` = `zamawiajacy`.`ID_zamawiajacego` AND `pozycje_zamowieniowe`.`ID_pozycji_zamowieniowej` = `widok_aktualne_ceny2`.`ID_poz` AND ( `widok_aktualne_ceny2`.`aktualna_cena` IS NULL OR `wyroby4`.`rbh_spawanie` IS NULL OR `wyroby4`.`rbh_przygotowanie` IS NULL ) GROUP BY `wyroby4`.`kto_dodal`
  12.  
  13.  
  14.  
  15. ) AS nowa WHERE ktodod = (SELECT imie_nazwisko FROM uzytkownicy_loginy WHERE loginy = SUBSTRING_INDEX ( USER(), '@', 1))
  16.  
  17. GROUP BY ktodod


i trochę złe wyniki mi wychodzą.

Gdy w dwóch osobnych zapytaniach wartość COUNt mam odpowiednio 1 i 2 to suma tego zapytania powyżej wychodzi mi 3, ale gdy np w tych dwóch SELECTach mam wartości Count 1 i 1 to suma całego zapytania wyskakuje mi 1. Nie mam pojęcia dlaczego tak się dzieje....czy widzicie może coś w tym zapytaniu co może powodować taką anomalię?
nospor
UNION ALL ?
mihmih
pomogło, wielkie dzięki. Ale skoro UNION pomija takie same wartości to dlaczego gdy w obu SELECTach miałem po 1 wartości to coś mi ginęło, a gdy w jednym z tych SELECTów pojawił się drugi wiersz to wszystkie rekordy zaczęły być liczone?

Chodzi o powtarzalność wierszy w tych kilku łączonych tabelach czy o takie same tabele? ( taka sama ilość wierszy z tymi samymi wartościami)?
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.