Введение в СУБД MySQL

Команды обработки данных

Показывать лекцию целиком

Поиск минимального и максимального значений

В MySQL имеются встроенные функции для вычисления минимального и максимального значений.

SQL имеет 5 агрегатных функций.

  • MIN(): минимальное значение
  • MAX(): максимальное значение
  • SUM(): сумма значений
  • AVG(): среднее значений
  • COUNT(): подсчитывает число записей
  • В этом параграфе мы рассмотрим поиск минимального и максимального значений столбца.

    Минимальное значение

    select MIN(salary) from employee_data;

    На рис. 7.1. приведен результат запроса.

    (рис 7.1) Поиск минимальной зарплаты

    Максимальное значение

    select MAX(salary) from employee_data;

    На рис. 7.2. приведен результат запроса.

    (рис 7.2) Поиск максимальной зарплаты

    Задания

  • Найдите минимальные надбавки.
  • Найдите максимальную зарплату среди всех "программистов".
  • Найдите возраст самого старого "продавца".
  • Найдите имя и фамилию самого старого сотрудника.
  • Возможные решения

    1. mysql> select MIN(perks) from employee_data;

    На рис. 7.3. приведен результат запроса.

    (рис 7.3) Минимальные надбавки

    2.

    mysql> select MAX(salary) from employee_data
        -> where title = 'программист';

    На рис. 7.4. приведен результат запроса.

    (рис 7.4) Максимальная зарплата среди программистов
    3. mysql> select MAX(age) from employee_data
        -> where title = 'продавец';

    На рис. 7.5. приведен результат запроса.

    (рис 7.5) Возраст самого старого продавца

    4. Вот один из способов сделать без использования агрегатных функций.

    mysql> select f_name, l_name, age
        -> from employee_data
        -> order by age DESC limit 1;

    На рис. 7.6. приведен результат запроса.

    (рис 7.6) Имя и фамилия самого старого сотрудника

    Поиск среднего значения и суммы

    Суммирование значений столбца с помощью функции SUM

    Агрегатная функция SUM() вычисляет общую сумму значений в столбце. Для этого необходимо задать имя столбца, которое должно быть помещено внутри скобок.

    Давайте посмотрим, сколько компания BigFoot тратит на зарплату своих сотрудников.

    select SUM(salary) from employee_data;

    На рис. 7.7. приведен результат запроса.

    (рис 7.7) Сумма всех зарплат

    Аналогично можно вывести общую сумму надбавок, выдаваемых сотрудникам.

    select SUM(perks) from employee_data;

    На рис. 7.8. приведен результат запроса.

    (рис 7.8) Сумма всех надбавок

    Можно найти также общую сумму зарплаты и надбавок.

    select sum(salary) + sum(perks) from employee_data;

    На рис. 7.9. приведен результат запроса.

    (рис 7.9) Общая сумма зарплаты и надбавок

    Здесь показаны также дополнительные возможности команды SELECT. Значения можно складывать, вычитать, умножать или делить. В действительности можно записывать полноценные арифметические выражения.

    Вычисление среднего значения

    Агрегатная функция AVG() используется для вычисления среднего значения данных в столбце.

    select avg(age) from employee_data;

    На рис. 7.10. приведен результат запроса.

    (рис 7.10) Средний возраст сотрудников

    Пример выше вычисляет средний возраст сотрудников компании BigFoot, а следующий выводит среднюю зарплату.

    select avg(salary) from employee_data;

    На рис. 7.11. приведен результат запроса.

    (рис 7.11) Средняя зарплата сотрудников

    Задания

  • Вывести сумму всех возрастов сотрудников, работающих в компании BigFoot.
  • Как вычислить общее количество лет стажа работы сотрудников в компании BigFoot?
  • Вычислите сумму зарплат и средний возраст сотрудников, которые занимают должность "программист".
  • Что делает следующий оператор?
  • select (SUM(perks)/SUM(salary) * 100)
    from employee_data;

    Возможные решения

    1. mysql> select SUM(age) from employee_data;

    На рис. 7.12. приведен результат запроса.

    (рис 7.12) Сумма всех возрастов сотрудников

    2. mysql> select SUM(yos) from employee_data;

    На рис. 7.13. приведен результат запроса.

    (рис 7.13) Общее количество лет стажа работы сотрудников
    3. mysql> select SUM(salary), AVG(age)
        -> from employee_data where
        -> title = 'программист';

    На рис. 7.14. приведен результат запроса.

    (рис 7.14) Сумма зарплат и средний возраст программистов

    4. Этот оператор выводит процент зарплаты, который сотрудники BigFoot получают в качестве надбавок.

    mysql> select (SUM(perks)/SUM(salary) * 100)
        -> from employee_data;

    На рис. 7.15. приведен результат запроса.

    (рис 7.15) Процент зарплаты, который сотрудники получают в качестве надбавок

    Именование столбцов

    MySQL позволяет задавать имена для выводимых столбцов. Поэтому вместо f_name или l_name и т.д. можно использовать более понятные и наглядные термины. Это делается с помощью оператора AS.

    select avg(salary) AS
    'Средняя зарплата' from
    employee_data;

    На рис. 7.16. приведен результат запроса.

    (рис 7.16) Вывод средней зарплаты с использованием псевдо-имен столбцов.

    Такие псевдо-имена могут сделать вывод более понятным для пользователей. Важно только помнить, что при задании псевдо-имен с пробелами необходимо заключать такие имена в кавычки. Вот еще один пример:

    select (SUM(perks)/SUM(salary) * 100)
    AS 'Процент надбавок' from
    employee_data;

    На рис. 7.17. приведен результат запроса.

    (рис 7.17) Вывод процента зарплаты, которую сотрудники получают в качестве надбавок с использованием псевдо-имен

    Подсчет числа записей

    Агрегатная функция COUNT() подсчитывает и выводит общее число записей. Например, чтобы подсчитать общее число записей в таблице, выполните следующую команду.

    select COUNT(*) from employee_data;

    На рис. 7.18. приведен результат запроса.

    (рис 7.18) Общее количество записей

    Как мы уже знаем, знак * означает "все данные".

    Теперь давайте подсчитаем общее число сотрудников, которые занимают должность "программист".

    select COUNT(*) from employee_data
    where title = 'программист';

    На рис. 7.19. приведен результат запроса.

    (рис 7.19) Общее количество сотрудников-программистов

    Группировка данных

    Предложение GROUP BY позволяет группировать аналогичные данные. Поэтому, чтобы вывести все уникальные должности в таблице, можно выполнить команду

    select title from employee_data
    GROUP BY title;

    На рис. 7.20. приведен результат запроса.

    (рис 7.20) Все уникальные должности сотрудников

    Можно видеть, что это аналогично использованию DISTINCT в предыдущей лекции.

    Вот как можно подсчитать число сотрудников имеющих определенную должность.

    select title, count(*)
    from employee_data GROUP BY title;

    На рис. 7.21. приведен результат запроса.

    (рис 7.21) Количество сотрудников по должностям

    В предыдущей команде MySQL сначала создает группы различных должностей, а затем выполняет подсчет в каждой группе.

    Сортировка данных

    Теперь давайте найдем и выведем число сотрудников, имеющих различные должности, и отсортируем их с помощью ORDER BY.

    select title, count(*) AS Number
    from employee_data
    GROUP BY title
    ORDER BY Number;

    На рис. 7.22. приведен результат запроса.

    (рис 7.22) Количество сотрудников по должностям с сортировкой

    Задания

  • Подсчитайте число сотрудников, которые проработали в BigFoot более трех лет.
  • Подсчитайте количество сотрудников в группах одного возраста.
  • Измените предыдущее задание так, чтобы возраст выводился в убывающем порядке.
  • Найдите средний возраст сотрудников в различных подразделениях (должностях).
  • Измените предыдущий оператор так, чтобы данные выводились в убывающем порядке среднего возраста.
  • Возможные решения

    1. mysql> select count(*) from employee_data
        -> where yos > 3;

    На рис. 7.23. приведен результат запроса.

    (рис 7.23) Число сотрудников, которые проработали более трех лет
    2. mysql> select age, count(*)
        -> from employee_data
        -> GROUP BY age;

    На рис. 7.24. приведен результат запроса.

    (рис 7.24) Количество сотрудников в группах одного возраста
    3. mysql> select age, count(*)
        -> from employee_data
        -> GROUP BY age
        -> ORDER by age DESC;

    На рис. 7.25. приведен результат запроса.

    (рис 7.25) Количество сотрудников в группах одного возраста с обратной сортировкой
    4. mysql> select title, AVG(age)
        -> from employee_data
        -> GROUP BY title;

    На рис. 7.26. приведен результат запроса.

    (рис 7.26) Средний возраст сотрудников по должностям
    5. mysql> select title, AVG(age)
        -> AS 'средний возраст'
        -> from employee_data
        -> GROUP BY title
        -> ORDER BY 'средний возраст' DESC;

    На рис. 7.27. приведен результат запроса.

    (рис 7.27) Средний возраст сотрудников по должностям с использованием псевдо-имени столбца

    Примечание: Нам нужно задать псевдо-имя для столбца, содержащего среднее значение возраста, чтобы его можно было сортировать.

    Вернуться к учебному плану