73.64K
Категория: Базы данныхБазы данных

Группировка и сортировка записей

1.

Лекция 4. Группировка и сортировка
записей
1.Группировка записей (Предложение GROUP BY)
2.Агрегатные функции
3.Сортировка записей
4.Подзапросы

2.

Группировка записей (GROUP BY)
Группировка записей – это объединение всех записей с одинаковыми
значениями одного или нескольких столбцов в одну запись.
recordId goodId
1
2
3
4
5
6
7
8
1
3
5
1
6
7
4
2
quan price saleId
tity
3,00 3,00
1
2,00 8,50
1
2,50 5,50
1
2,0
3,00
2
1,50 4,50
2
1,00 2,00
3
2.00 14,50
3
1,00 1,00
3
Сумма
9.00
17.00
13.75
6.00
6.75
2.00
29.00
1.00
USE shop;
SELECT saleId, count(*) as 'Кол-во'
FROM sales
GROUP BY saleId;
saleId
Кол-во
1
3
2
2
3
3

3.

Предложение HAVING
USE shop;
SELECT saleId, count(*) as 'Кол-во'
saleId
Кол-во
GROUP BY saleId
1
3
HAVING count(*) >2;
3
3
FROM sales

4.

Агрегатные функции
Язык Transact-SQL поддерживает следующие шесть агрегатных функций:
MIN
MAX
SUM
AVG
COUNT
COUNT_BIG
Аргументу агрегатной функции может предшествовать
одно из двух возможных ключевых слов:
ALL — указывает, что вычисления выполняются над
всеми значениями столбца. Значение по умолчанию;
DISTINCT — указывает, что для вычислений
применяются только уникальные значения столбца.

5.

Агрегатные функции MAX и MIN
saleId
saledate
salesum
USE shop;
empId
SELECT MAX(salesum) as maxsum
1
2021-09-02
33,75
1001
2
2021-09-03
12,75
1001
3
2021-09-03
32,00
1004
FROM ledger
Maxsum
33,75
Таблица «Журнал учета продаж» (ledger)
USE Shop;
SELECT saleId, saledate
FROM Ledger
WHERE salesum=33.75;
saleId
saledate
empId
1
2021-09-02
1001

6.

Агрегатные функции SUM и AVG
USE Shop;
SELECT SUM(salesum) total_sum
FROM Ledger;
USE Shop;
SELECT AVG(salesum) as avg_sum
FROM Ledger
total_sum
avg_sum
78.50
26.166666

7.

Агрегатные функции COUNT и СOUNT_BIG
Агрегатная функция COUNT имеет две разные формы:
COUNT([DISTINCT] имя_столбца)
COUNT(*)
USE shop;
SELECT saleId, COUNT(goodId) as Количество
FROM Sales
GROUP BY saleId;
saleId
Количество
1
3
2
2
3
3

8.

Сортировка записей (ORDER BY)
ORDER BY имя_столбца | номер_столбца [ASC | DESC]
USE Shop;
SELECT saleId, goodId, price
FROM Sales
ORDER BY saleId, price;
saleId
1
1
1
2
2
3
3
3
goodId
1
5
3
1
6
2
7
4
price
3.00
5.50
8.50
3.00
4.50
1.00
2.00
14.50

9.

Подзапросы
Подзапросом называется запрос, который помещается в другой
запрос в качестве источника данных.
Подзапрос с оператором сравнения
USE Shop;
SELECT LName as Фамилия, FName as Имя
FROM Employees
WHERE deptid =
(SELECT deptid FROM Depts WHERE Dept = 'Склад');
Фамилия
Имя
Федосеенко Валерий
Мазуров
Владимир

10.

Подзапросы
Подзапрос с оператором IN
USE Shop;
SELECT good as Товар
FROM Goods
WHERE goodid IN
(SELECT goodid FROM Sales WHERE saleid=1);
Товар
мука
свинина
треска

11.

Подзапросы
Подзапросы с оператором ANY
use Shop
SELECT empId, LName as Фамилия, FName as Имя
FROM Employees
WHERE empId= ANY(SELECT empId FROM Ledger)
empId
Фамилия
Имя
1001
Сизов
Александр
1004
Петунин
Николай

12.

Подзапросы
Подзапрос с оператором ALL
use Shop
SELECT empId, LName as Фамилия, FName as Имя
FROM Employees
WHERE empId > ALL(SELECT empId FROM Ledger)
empId Фамилия
Имя
1005
Бамбизо
Виталий
1006
Федосеенко
Валерий
1007
Мазуров
Владимир
1008
Жданович
Юрий
1009
Бондаренко
Сергей

13.

Подзапросы
Подзапрос с функцией EXISTS
Функция EXISTS принимает подзапрос (вложенный запрос) в качестве аргумента и возвращает значение
FALSE, если вложенный запрос не возвращает строк и значение TRUE в противном случае.
USE Shop;
SELECT slaeId, saledate
saleId saledate
FROM Ledger L
WHERE EXISTS
(SELECT * FROM sales S
1
2020-09-02
WHERE L.saleId = S.saleId AND goodId =1);
2
2020-09-03
English     Русский Правила