Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Probelm warunku "wart > 1000" dla sum(wartosc) as 'wart'
Bartess
post
Post #1





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
nospor
post
Post #2





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




group by... HAVING - patrz manual mysql

I w warunkach nie uzywaj aliasu tylko normalnie sum(...)
Go to the top of the page
+Quote Post
Bartess
post
Post #3





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Bartess 26.01.2016, 17:36:08
Go to the top of the page
+Quote Post
nospor
post
Post #4





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




Odpowiedz 'osoby nie lubiacej leniwcow' - zajrzyj do tego manuala. Tam naprawde nie ma zadnej filozofii... zamiast where robisz having :/
Go to the top of the page
+Quote Post
Bartess
post
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 26.01.2016

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Bartess 26.01.2016, 17:56:33
Go to the top of the page
+Quote Post
Pyton_000
post
Post #6





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


Proste. Jeśli wypluwasz SUM() to zastosuj alias i wrzuć go do having (duplikacja) jeśli nie wypluwasz to w having warunek.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 28.09.2025 - 14:41