Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Probelm warunku "wart > 1000" dla sum(wartosc) as 'wart'
Forum PHP.pl > Forum > Bazy danych > MySQL
Bartess
Witam.
Mam problem... dlatego piszę :-).
  1. SELECT kontrahent, sum(wartosc) AS 'wart'
  2. FROM faktury WHERE 1
  3. GROUP BY kontrahent

I to jest ok.
Ale w jaki sposób uzyskać wyniki tylko dla kontrahentów, dla których suma wartości jest większa niż np. 1000?
Próbowałem na takie sposoby:
  1. SELECT kontrahent, sum(wartosc) AS 'wart'
  2. FROM faktury
  3. WHERE wart > 1000
  4. GROUP BY kontrahent

Daje taki błąd: #1054 - Unknown column 'wart' in 'where clause'

  1. SELECT kontrahent, sum(wartosc) AS 'wart'
  2. FROM faktury
  3. WHERE sum(wartosc) > 1000
  4. GROUP BY kontrahent

Ale dostaję błąd: #1111 - Invalid use of group function

  1. SELECT kontrahent, sum(wartosc) AS 'wart'
  2. FROM faktury
  3. WHERE 'wart' > 1000
  4. GROUP BY kontrahent

Takie zapytanie nic nie zwraca.

Jak to ugryźć?

Pozdrawiam
nospor
group by... HAVING - patrz manual mysql

I w warunkach nie uzywaj aliasu tylko normalnie sum(...)
Bartess
Dzięki za mega szybką odpowiedź! A.... takie pytanie leniwca ;-). A.. jakby to wyglądało w tym przypadku?

Dlaczego nie powinno używać się aliasów? Ze względu na "gramatykę" SQLa, czy tak się przyjęło?

Pozdrawiam.
nospor
Odpowiedz 'osoby nie lubiacej leniwcow' - zajrzyj do tego manuala. Tam naprawde nie ma zadnej filozofii... zamiast where robisz having :/
Bartess
Doskonale Cię rozumiem. Sam muszę walczyć z tym leniem jaki we mnie siedzi ;-).
Bardzo dziękuję za pomoc z tym HEVING. Teraz moje działające pytanie wygląda tak:
  1. SELECT kontrahent, sum(wartosc) AS wart
  2. FROM faktury
  3. GROUP BY kontrahent
  4. HAVING sum(wartosc) > 1000
  5. ORDER BY sum(wartosc) DESC
Tylko dlaczego nie powinno stosować się aliasów?
Takie zapytanie też działa:
  1. SELECT kontrahent, sum(wartosc) AS wart
  2. FROM faktury
  3. GROUP BY kontrahent
  4. HAVING wart > 1000
  5. ORDER BY wart DESC


Z czego wynika taka właśnie składnia zapytania? Widzę też, że czy napiszę as 'wart' czy as wart to nie ma to znaczenia. A pytam po to, by pisać jak należy :-).

Pozdrawiam.
Pyton_000
Proste. Jeśli wypluwasz SUM() to zastosuj alias i wrzuć go do having (duplikacja) jeśli nie wypluwasz to w having warunek.
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.