Np.:
HAVING (AVG(pensja) > 1500) AND (UPPER(lokalizacja) = 'BIAŁYSTOK' OR UPPER(lokalizacja) = 'WARSZAWA');
Np.:
HAVING (AVG(pensja) > 1500) AND (UPPER(lokalizacja) = 'BIAŁYSTOK' OR UPPER(lokalizacja) = 'WARSZAWA');
Można, tylko w HAVING warunki są na funkcje agregujące, czyLi u ciebie warunki na lokalizacje wędrują do where
SELECT
KOLUMNY DO GRUPOWANIA
,AVG(PENSJA)
FROM
TAB
WHERE
UPPER(lokalizacja) IN ('BIAŁYSTOK','WARSZAWA')
GROUP BY
KOLUMNY DO GRUPOWANIA
HAVING
(AVG(pensja) > 1500)
Nie do końca jest to prawda, że Having jest na funkcje agregujące. Jeśli HAVING jest na czymś to jest na grupach danych w wyniku grupowania danych poleceniem GROUP BY bo jak wytłumaczyć takie zapytanie bez funkcji w SELECT i samym poleceniu HAVING?:
select Id from dbo.Tabela
group by Id
having Id= 3
To zależy od silnika i jego możliwości, ale wystarczy że zmodyfikuje Twoje zapytanie i nie zadziała:
SELECT id
FROM dbo.tabela
GROUP BY id
HAVING waluta = 'PLN' and id=3
Do poprawy jest przeniesienie warunku na walutę do WHERE
SELECT id
FROM dbo.tabela
WHERE waluta = 'PLN'
GROUP BY id
HAVING id=3
Oczywiście, że warunek generalnie powinien być w WHERE. Tego nie kwestionowałem. Odniosłem się tylko do tego co to jest having i że nie stosujecie go tylko i wyłącznie na funkcjach agregujących aczkolwiek zgodzę się, że to jego główne zastosowanie.
Potrafię również zrozumieć, że w innych silnikach działa to inaczej :)
@firefox
HAVING
używa się na dla grupy lub zbioru w ramach grupy.
Przytoczony przez Ciebie przykład użycia HAVING
to odniesienie się do grupy wyznaczonej przez Id=3, a nie do wierszy o Id=3.
Na MSDN możemy przeczytać:
Specifies a search condition for a group or an aggregate.
https://msdn.microsoft.com/pl-pl/library/ms180199(v=sql.110).aspx
Przecież tak napisałem :)
Jeśli HAVING jest na czymś** to jest na grupach danych w wyniku grupowania danych poleceniem GROUP BY**
Jeszcze raz pozwole sobie napisać, że having nie jest tylko i wyłącznie do filtrowania grup na funkcjach, dlatego, że zaprezentowany przeze mnie przykład działa bez użycia jakiejkolwiek funkcji i oczywiście odnosi się do grupy o id = 3. Natomiast przykład ten zaznaczam raz jeszcze pokazuje, że Having możemy użyć również wtedy gdy nie jest użyta żadna funkcja czy to w SELECT czy w Group by czy w jakimkolwiek innym miejscu :)
Ty natomiast napisałeś:
tylko w HAVING warunki są na funkcje agregujące
Tyle w tym wątku kończę swoją wypowiedź :)