Junior
Kāda ir atšķirība starp konstrukcijām WHERE un HAVING SQL?
sobes.tech AI
Atbilde no AI
WHERE filtrē rindas pirms grupēšanas (GROUP BY), ietekmējot, kuras rindas piedalīsies agregācijas funkcijās. HAVING filtrē grupas pēc grupēšanas, balstoties uz agregācijas funkciju rezultātiem.
| Īpašība | WHERE | HAVING |
|---|---|---|
| Pielietojums | Uz individuālām rindām | Uz rindu grupām |
| Apstrādes laiks | Pirms GROUP BY | Pēc GROUP BY |
| Lietošana | Ar tabulas laukiem, bet bez agregācijas funkcijām | Ar agregācijas funkciju rezultātiem vai GROUP BY laukiem |
WHERE lietošanas piemērs:
SELECT produkta_nosaukums, cena
FROM produkti
WHERE category_id = 1; -- Filtrē rindas **pirms** grupēšanas (ja tas būtu nepieciešams)
HAVING lietošanas piemērs:
SELECT category_id, COUNT(*) AS kopējais_produktu_skaits
FROM produkti
GROUP BY category_id
HAVING COUNT(*) > 5; -- Filtrē grupas **pēc** kopējā produktu skaita skaitīšanas
Kombinētas lietošanas piemērs:
SELECT category_id, AVG(cena) AS vidējā_cena
FROM produkti
WHERE krājums > 0 -- Filtrē tikai krājumā esošos produktus **pirms** grupēšanas
GROUP BY category_id
HAVING AVG(cena) < 100; -- Filtrē grupas ar vidējo cenu mazāku par 100 **pēc** grupēšanas un vidējās cenas aprēķināšanas