5.1 Изявление HAVING
Има друг полезен оператор в SQL, който се използва с GROUP BY, той се нарича HAVING.
По смисъла си той е напълно аналогичен на оператора WHERE. Той ви позволява само WHEREда зададете филтър за ред преди групиране и с помощта HAVINGможете да зададете филтър, който да се прилага към записите след групирането.
Общият изглед на заявката при използване на групиране и филтриране на резултатите от групирането е Howто следва:
SELECT columns
FROM table
WHERE condition
GROUP BY columns
HAVING condition
HAVINGможе да се използва само ако заявката съдържа GROUP BY.
Нека напишем заявка, в която показваме броя на наетите служители по години.
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
И резултатът от тази заявка:
| година на наем | обща сума |
|---|---|
| 2012 г | 1 |
| 2013 | 1 |
| 2014 г | 1 |
| 2015 г | 2 |
| 2018 г | 1 |
И сега от него изключваме годините, в които са наети един or по-малко служители. Пример:
SELECT
YEAR(join_date) AS hire_year,
COUNT(*) AS total
FROM employee
GROUP BY hire_year
HAVING total > 1
И резултатът от тази заявка:
| година на наем | обща сума |
|---|---|
| 2015 г | 2 |
5.3 Ред за изпълнение на извлечения
За да пишете правилни и ефективни SQL заявки, трябва да разберете How се изпълняват от SQL сървъра.
Процедурата за извършване на действия е строго регламентирана и не зависи от вашето желание. Не можете да пренаредите операторите и да получите различен ред.
SQL заявката се изпълнява на няколко етапа в този ред.
- Етап 1 - извличане на редове
- Първо се избират всички редове от посочената table.
- След това към тях се добавят изчислени полета.
- И тогава от всички редове остават само тези, които отговарят на conditionто
WHERE - Етап 2 - групиране
- След това групирането се прилага към резултатите.
- По време на групирането полета като
COUNT(*). - Накрая към резултата от групирането се прилага филтър
HAVING. - Етап 3 - сортиране
- Редовете, получени в предишните стъпки, се сортират с помощта на
ORDER BY.
Накрая резултатът може да бъде подрязан с LIMITи OFFSET.
GO TO FULL VERSION