Sobes.tech
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