6.1 Списък на агрегатни функции
Когато използвате групиране на редове в SQL с оператора GROUP BY
, можете да използвате SELECT
функции в израза, които работят с групираните данни. Такива функции се наричат още агрегатни функции.
Ето списък на най-популярните:
# | функция | Описание |
---|---|---|
1 | БРОЯ() | Връща броя на стойностите в група |
2 | SUM() | Връща сумата от стойности в група |
3 | MAX() | Връща максималната стойност на група |
4 | MIN() | Връща минималната стойност на група |
5 | AVG() | Връща средната стойност на група |
6 | BIT_AND() | Извършва побитово И върху всички групови стойности |
7 | BIT_OR() | Извършва побитово ИЛИ върху всички групови стойности |
8 | BIT_XOR() | Извършва побитово XOR върху всички групови стойности |
9 | GROUP_CONCAT() | Свързва всички групови стойности в един низ |
Сега нека да разгледаме някои примери с нашите агрегатни функции.
6.2 Анализ на заплатите на служителите
Нека изчислим някои статистически данни за нашите служители от tableта на служителите .
Първи въпрос: колко служители имаме?
Ако искаме да разберем броя на всички записи в tableта, тогава можем да използваме агрегатната функция за това COUNT
. Заявката ще изглежда така:
SELECT COUNT(*) FROM employee
И MySQL ще върне като отговор числото 6. Имаме 6 служители в отдела, включително котка. Добре.
Въпрос втори: колко плащаме на месец на всички служители?
За да отговорим на този въпрос, трябва да сумираме заплатите на всички служители. За целта използваме агрегатната функцияSUM()
Заявката ще изглежда така:
SELECT SUM(salary) FROM employee
Обърнете внимание, че този път от нас се изисква да посочим стойностите на коя колона обобщаваме. Посочor сме колона за заплати . Не можем просто да сумираме всички полета в table.
И MySQL ще върне като отговор числото 461000. Имаме 6 служители в отдела, а заплатата е 461 хиляди. Твърде много.
И накрая, третият въпрос: Howви са максималните и минималните ни заплати във ведомството? Е, нека изчислим средната заплата. За да направим това, имаме нужда от функциите MIN
, MAX
и AVG
.
Този път заявката ще бъде малко по-сложна и ще изглежда така:
SELECT MIN(salary), AVG(salary), MAX(salary)
FROM employee
Резултатът от тази заявка ще бъде:
MIN (заплата) | СР (заплата) | МАКС (заплата) |
---|---|---|
1000 | 76833.3333 | 200 000 |
Минималната заплата в нашия отдел е 1000 долара – много добре. Максималната заплата е 200 хиляди, но това е директорът.
Но средната заплата е твърде висока, трябва по няHowъв начин да оптимизирате разходите. Да наемем друга котка и това е :)