Замечания по изучению MySQL ------ групповой запрос

//----------групповой запрос----------//

1. Грамматика

select 分组函数,分组的列表
from 表
【where 筛选条件】
group by 分组的列表
【order by 排序的字段】;

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

2. Особенности

1. Поле, запрашиваемое вместе с функцией группировки, должно быть полем, которое появляется после группировки;

2. Скрининг делится на две категории: предгрупповой скрининг и послегрупповой скрининг;

                                Таблица, отфильтрованная по ключевому слову Местоположение

        Фильтруйте WHERE перед исходной таблицей GROUP BY перед группировкой.

        Фильтровать после группировки ЕСТЬ сгруппированные результаты после GROUP BY

Примечание. Условие функции группировки должно быть помещено в предложение has, которое можно фильтровать перед группировкой, причем фильтр перед группировкой является предпочтительным;

Вопрос 1. Можно ли использовать функцию группировки для фильтрации после того, как? Ответ: Нет;

Вопрос 2: где — группировать по — обладанию? Вообще говоря, если вы можете использовать предгрупповой скрининг, попробуйте использовать предгрупповой скрининг для повышения эффективности;

3. Группировка может выполняться по одному полю или по нескольким полям, причем несколько полей разделяются запятыми и в произвольном порядке;

4. Можно использовать при сортировке;

3. Специальное использование

1. Введение. Запросите количество сотрудников в каждом отделе.

SELECT COUNT(*) FROM employees WHERE department_id=90;

2. Простая группировка

(1) Случай 1: Запрос средней зарплаты сотрудников для каждого вида работы.

SELECT AVG(salary),job_id
FROM employees
GROUP BY job_id;

(2) Случай 2: Запрос количества отделов в каждом месте.

SELECT COUNT(*),location_id
FROM departments
GROUP BY location_id;

(3) Случай 3: Запрос максимальной заработной платы сотрудников каждого вида работы.

SELECT MAX(salary),job_id
FROM employees
GROUP BY job_id; 

3. Фильтрация перед группировкой.

(1) Случай 1: Запросите максимальную зарплату каждого отдела, содержащего символ a в почтовом ящике.

SELECT MAX(salary),department_id
FROM employees
WHERE email LIKE '%a%'
GROUP BY department_id;

(2) Случай 2. Запросите среднюю зарплату сотрудников каждого руководителя, имеющих бонусы.

SELECT AVG(salary),manager_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY manager_id;

4. Скрининг после группировки

(1) Добавьте простые условия фильтра.

  1) Случай: запрос, в каком отделе работает более 5 сотрудников.

#(1)查询每个部门的员工个数
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id

#(2)根据(1)的结果进行筛选,查询哪个部门的员工个数>2
SELECT COUNT(*),department_id
FROM employees
GROUP BY department_id
HAVING COUNT(*)>2;#having用于分组后的筛选,where用于分组前对原始表的筛选

(2) Добавьте сложные условия фильтра. Если условия слишком сложны, их можно разделить и выполнять отдельно.

Примечание. Некоторые из исходной таблицы используют фильтрацию по местам, например: имеют бонусы, а те, кого нет в исходной таблице, используют необходимость фильтрации, например: самая высокая зарплата>12000;

  1) Случай 2: Наибольшая заработная плата сотрудников с премированием за каждый вид работы > 12000 номер вида и максимальная заработная плата

SELECT MAX(salary),job_id
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING MAX(salary)>12000;

  2) Случай 3: Число лидеров и минимальная зарплата каждого руководителя, чье число лидеров > 102 превышает 5000.

SELECT MIN(salary),manager_id
FROM employees
WHERE manager_id>102
GROUP BY manager_id
HAVING MIN(salary)>5000;

5. Добавьте сортировку

Случай: Наибольшая заработная плата сотрудников с премированием за каждый вид работы > 6000, номер вида и максимальная заработная плата, в порядке возрастания наибольшей заработной платы.

SELECT job_id,MAX(salary) m
FROM employees
WHERE commission_pct IS NOT NULL
GROUP BY job_id
HAVING m>6000
ORDER BY m ;

6. Группировка по нескольким полям

Случай: Запросить минимальную заработную плату для каждого типа работы и каждого отдела и отсортировать по минимальной заработной плате.

SELECT MIN(salary),job_id,department_id
FROM employees
GROUP BY department_id,job_id
ORDER BY MIN(salary) DESC;

7. Группировка по выражению или функции

Случай: группировка по длине имени сотрудника, запрос количества сотрудников в каждой группе и фильтрация количества сотрудников > 5.

SELECT COUNT(*),LENGTH(last_name)
FROM employees
GROUP BY LENGTH(last_name)
HAVING COUNT(*)>5;

#可以使用别名
SELECT COUNT(*) c,LENGTH(last_name) la_name
FROM employees
GROUP BY la_name
HAVING c>5;

Guess you like

Origin blog.csdn.net/weixin_47156401/article/details/131927905