Руководство по языку sql


Download 1.22 Mb.
Pdf ko'rish
bet4/62
Sana23.04.2023
Hajmi1.22 Mb.
#1393455
1   2   3   4   5   6   7   8   9   ...   62
Bog'liq
Firebird3 SQL features

order by id; 
Результат 
id department salary percentage 
-- ---------- ------ ---------- 
1 R & D 10.00 0.2040 
2 SALES 12.00 0.2448 
3 SALES 8.00 0.1632 
4 R & D 9.00 0.1836 
5 R & D 10.00 0.2040 
Запрос повторяется и может работать довольно долго, особенно если 
EMPLOYEE 
является сложным представлением. 
Этот запрос может быть переписан в более быстрой и элегантной форме с 
использованием оконных функций: 
select 
id, 
department, 
salary, 
salary / sum(salary) OVER () percentage 
from employee 
order by id; 
Здесь sum(salary) OVER () вычисляет сумму всех зарплат из запроса 
(таблицы сотрудников). 
Секционирование 
Как и для агрегатных функций, которые могут работать отдельно или по 
отношению к группе, оконные функции тоже могут работать для групп, которые 
называются “секциями” (partition). 
Синтаксис
(...) OVER (PARTITION BY [, ...]) 
Для каждой строки, оконная функция обсчитывает только строки, которые 
попадают в то же самую секцию, что и текущая строка. 
Агрегирование над группой может давать более одной строки, таким 
образом, 
к 
результирующему 
набору, 
созданному 
секционированием, 
присоединяются результаты из основного запроса, используя тот же список 
выражений, что и для секции. 


Новые возможности языка SQL Firebird 3.0 

Продолжая пример с сотрудниками, вместо того чтобы считать процент 
зарплаты каждого сотрудника от суммарной зарплаты сотрудников, посчитаем 
процент от суммарной зарплаты сотрудников того же отдела: 
select 
id, 
department, 
salary, 
salary / sum(salary) OVER (
Download 1.22 Mb.

Do'stlaringiz bilan baham:
1   2   3   4   5   6   7   8   9   ...   62




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling