Upload
others
View
14
Download
0
Embed Size (px)
Citation preview
Использование в SASязыка запросов SQL
Лекция 5: SQL
Роман Волынец, [email protected]
1
Москва – 2015 – ВМК МГУ
Замечания об ошибках и опечатках просьба направлять лектору
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
Structured Query Language
SQL — язык структурированных запросов Стандартный инструмент для работы с
реляционными базами данных
Основные операции SQL
Data Definition Language (DDL) Создание в базе данных новой таблицы Изменение структуры таблицы
Data Manipulation Language (DML) Добавление в таблицу новых записей Изменение записей Удаление записей Выборка записей (из одной или нескольких таблиц)
Data Control Language (DCL) Предоставление/отзыв разрешений
Transaction Control Language (TCL) Поддержка транзакций
Краткая история SQL
1970 – первая работа по реляционным моделям данных (Э.Кодд)*
1974 – первая реализация SQL в составе СУБД System R компании IBM
1979 – реализация SQL в составе СУБД: Oracle V2 компании Relational Software Inc. System/38 компании IBM
1986 – первый стандарт ANSI SQL-86 1989 – свыше 75 систем, реализующих SQL 1989 – 2008 – дальнейшая стандартизация SQL
(ISO/ANSI)
* Codd, Edgar F (June 1970). "A Relational Model of Data for Large Shared Data Banks"
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
PROC SQL
SQL в системе SAS (1)
1989 — выход SAS 6.06 с поддержкой PROC SQL Развитие возможностей PROC SQL в новых версиях
Base SAS
PROC SQL follows most of the guidelines set by the American National Standards Institute (ANSI) in its implementation of SQL. However, it is not fully compliant with the current ANSI standard for SQL. The SQL research project at SAS has focused primarily on the expressive power of SQL as a query language. Consequently, some of the database features of SQL have not yet been implemented in PROC SQL.
Учитывает стандарты
ANSI
Включает
улучшения
SAS
SQL в системе SAS (2)
• Особенности SQL в SAS Нет поддержки транзакций (TCL) Нет операторов контроля доступа (DCL) Два типа данных (numeric и character) Пустые значения MISSING, отсутствие NULL
• Улучшения SQL в SAS Атрибуты колонок (модификаторы) Ключевое слово CALCULATED Remerging – сведение детальных и агрегированных
данных
SAS – это не СУБД!
Сравнение PROC SQL и DATA Step (1)
Возможности DATA Step SQL
Полноценный язык программирования (произвольные алгоритмы)
Создание нескольких таблиц за один проход по набору данных
Работа с данными во внешних файлах
Удобно совмещать несколько операций в одном шаге (отбор записей, соединение таблиц, сортировка, группировка)
Удобно вводить данные в тексте программы (генерировать данные)
PROC SQL может заменить несколько шагов обработки данных SAS
PROC SQL
DATA Step
PROC SORT PROC PRINT
Сравнение PROC SQL и DATA Step (2)
Входные данные и результаты
12
Input Output
PROC SQL
DBMS Table
SAS Data Set
SAS Data View
Report
1
3
PROC SQL – это … PROC SQL – это не …
Инструмент для выполнения
запросов к данным
Инструмент для выполнения
преобразований данных и
для управления данными
Дополнение к шагу данных
(DATA Step), еще один
способ работать с наборами
данных SAS
Инструмент для создания
пользовательских отчетов
Замена шага данных
(DATA Step)
Кратко о PROC SQL
Терминология
Обработка данных(Data Processing) SAS SQL
File
Файл
Data Set
Набор данных
TableТаблица
Record
Запись
ObservationНаблюдение
Row
Строка
FieldПоле
VariableПеременная
Column
Колонка
Синтаксис PROC SQL
• Справка: SAS® 9.3 SQL Procedure User's Guide• Синтаксис:
• Примеры опций PROC SQL NOEXEC – проверка синтаксиса операторов OUTOBS=N – выводить не более N записей в результат INOBS=N – использовать не более N записей из каждого
источника PRINT | NOPRINT – разрешить или запретить вывод
отчета оператором SELECT NONUMBER | NUMBER – нумерация строк в результатах
PROC SQL <опции>;
<оператор ... ;>
QUIT;
Использование опций PROC SQL
proc sql noexec;
NOTE: Statement not executed due to NOEXEC
option.
libname ecsql1 '/folders/myfolders/ecsql1';
proc sql inobs=10;
select * from ecsql1.qtr1_2007;
WARNING: Only 10 records were read from
ECSQL1.QTR1_2007 due to INOBS= option.
proc sql outobs=10;
WARNING: Statement terminated early due to
OUTOBS=10 option.
План выполнения SQL-запрооса
• Информация от оптимизатора SQL
(официально данные опции не документированы*)
* Paper CS-11 The SQL Optimizer Project: _Method and _Tree in SAS®9.1, Russ Lavery
proc sql _method _tree;
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
Операторы PROC SQL
• В теле PROC SQL можно указывать несколько операторов
• Каждый оператор (statement) начинается с ключевого слова и заканчивается точкой с запятой
• Каждый оператор выполняется отдельно
Операции с объектами Операции с записями Служебные операторы
ALTER ...;CREATE ...;DESCRIBE ...;DROP ...;
DELETE ...;INSERT ...;SELECT ...;UPDATE ...;
RESET <опции>;VALIDATE ...;
PROC SQL <опции>;
<оператор ... ;>
QUIT;
Оператор SELECT• Используется для запросов к данным – к одной или
нескольким таблицам (до 256 таблиц)• Результаты выводятся в виде отчета• Используется с оператором CREATE TABLE | VIEW
для создания таблиц/представлений• Синтаксис оператора SELECT:
SELECT object-item <, … object-item>
FROM from-list
<WHERE sql-expression>
<GROUP BY object-item <, … object-item >>
<HAVING sql-expression>
<ORDER BY order-by-item <DESC>
<, … order-by-item> <DESC>>;
Пример использования SELECT
proc sql;
select Employee_ID, Employee_Gender, Salary
from orion.employee_information
where Employee_Gender='F'
order by Salary desc;
quit;
Employee
Employee Annual
Employee ID Gender Salary
--------------------------------------
120260 F $207,885
120719 F $87,420
120661 F $85,495
121144 F $83,505
120798 F $80,755
Отбор записей
• Исключение дубликатов (DISTINCT)
• Отбор записей по условиям (WHERE)
Операторы сравнения Логические операторы Специальные операторы
select Employee_ID, Job_Title, Salary
from orion.employee_information
where Salary > 112000;
select distinct Department
from orion.employee_information;
Условия: Операторы сравнения
• Стандартные операторы сравнения для использования в условиях на отбор записей
Мнемоника Символы Определение
LT < Меньше
GT > Больше
EQ = Равно
LE <= Меньше или равно
GE >= Больше или равно
NE < >
¬=
^=
Не равно
Не равно (EBCDIC)
Не равно (ASCII)
Условия: Логические операторы
• Логические операторы используются для формирования комбинаций условий
Мнемоника Символы Определение
OR | ИЛИ, любое
AND & И, оба
NOT ¬ НЕ, отрицание (EBCDIC)
NOT ^ НЕ, отрицание (ASCII)
Условия: Специальные операторы
Оператор Пример
INwhere JobCategory in
('PT','NA','FA')
CONTAINS или ? where word ? 'LAM'
IS NULL
или
IS MISSING
where Product_ID is missing
BETWEEN – ANDwhere Salary between 70000 and
80000
SOUNDS LIKE (=*) where LastName =* 'SMITH'
LIKE
(с % или _ в шаблоне)
where Employee_Name like 'H%'
where JobCategory like '__1'
Выражения для колонок (1)
• Отбор всех колонок (звездочка):
• Для уточнения из какой таблицы/view поступает колонка используются префиксы имен таблиц/view
• Любые выражения SAS (константы, выражения –арифметические, логические, строковые; функции)
select * from orion.employee_information;
select customers.ID, T.Name, Action, Amount
from customers, transactions as T
where customers.ID=T.ID;
select Employee_ID, Employee_Gender,
int((today()-Birth_Date)/365.25) as Age
from orion.employee_information;
Выражения для колонок (2)
• Атрибуты колонок (имя, тип, описание, формат, информат)
• Ключевое слово CALCULATED для отсылки к колонке, значение которой вычисляется в данном запросе
select Employee_ID 'Employee ID',
Salary*0.1 label='Bonus'
format=dollar10.
from orion.employee_information;
select Employee_ID, Employee_Gender,
Salary, Salary*0.1 as Bonus
from orion.employee_information
where calculated Bonus<3000;
Выражения для колонок (3)
• Выражение SELECT / CASE / WHEN / ELSE / END
• Многие стандартные функции SAS и пользовательские функции (PROC FCMP)
• Суммирующие функции (статистики)
select Job_Title, Salary,
case scan(Job_Title,-1,' ')
when 'I' then Salary*.05
when 'II' then Salary*.07
when 'III' then Salary*.10
when 'IV' then Salary*.12
else Salary*.08
end as Bonus
from orion.employee_information;
Использование функций
• В SQL-запросах можно использовать встроенные и пользовательские функции
proc fcmp outlib=work.fun1.fun1;
function myfun(id) $ 4;
return (substr(put(id,10.),1,4));
endsub;
run;
options cmplib=work.fun1.fun1;
proc sql;
select order_id,
myfun(order_id) as first_4_left
from ecsql1.qtr1_2007 ;
quit;
Определение функции
Использование функции
SQL SAS Описание
AVG MEAN Среднее значение
COUNT FREQ, N Количество непустых (non-missing) значений
MAX MAX Наибольшее значение
MIN MIN Наименьшее значение
SUM SUM Сумма непустых (non-missing) значений
NMISS Количество пустых (missing) значений
STD Стандартное отклонение
VAR Дисперсия
• В PROC SQL можно использовать имена статистик по стандарту ANSI SQL и SAS:
Примеры суммирующих функций
Агрегирование данных (1)
• Выражение GROUP BY – для задания групп• Использование суммирующих функций
• В GROUP BY и ORDER BY можно ссылаться на колонку по номеру
select
order_type,
avg(quantity) format=3.1 label="Average",
sum(total_retail_price)
format=dollar10. label="Sum"
from ecsql1.order_fact
group by 1;
Агрегирование данных (2)
• Выражение HAVING – отбор записей после группировки (фильтрация по агрегатам)
• DISTINCT – для отбора уникальных значений переменных (в суммирующих функциях) или для отбора уникальных записей (с оператором SELECT)
select
order_type,
count(distinct customer_id),
sum(total_retail_price)
from esql1.order_fact
group by order_type
having sum(total_retail_price) > 30000;
Remerge (1)
• Сведение исходных и агрегированных данных • Если SELECT содержит колонку, созданную
суммирующей функцией, и колонку из детальных данных, то агрегированные данные автоматически добавляются в каждую запись исходных данных
• Опция NOREMERGE (для отключения такого поведения PROC SQL)
select employee_id, salary, max(salary) as maxs
from ecsql1.sales ;
NOTE: The query requires remerging summary
statistics back with the original data.
Remerge (2)
• Задача: найти сотрудников, которые имеют максимальную зарплату
• Обычный SQL: с помощью вложенного запроса
• SAS SQL:
select employee_id, gender, salary
from ecsql1.sales
where salary = (select max(salary)
from ecsql1.sales);
select employee_id, gender, salary
from ecsql1.sales
where salary = max(salary);
Вложенные запросы
• Внутри одного SQL-запроса могут использоваться другие SQL-запросы
• При формировании условий в WHERE / HAVING(subquery, подзапрос)
• При использовании в качестве источника данных в FROM (in-line views, встроенное представление)
Подзапросы
• Используются при формировании условий в выражениях WHERE / HAVING
• Подзапрос должен возвращать ровно одну колонку• Может возвращать одно значение (запись) или
несколько значений (записей)• Коррелированные (зависимые) и
некоррелированные (независимые) подзапросы• Операторы сравнения, ключевые слова ALL/ANY,
оператор IN, операторы EXIST/NOT EXIST
Коррелированные подзапросы
• Некоррелированный (независимый) подзапрос
• Коррелированный (зависимый)
select * from orion.staff
where Salary > (select avg(Salary)
from orion.staff);
select * from orion.staff as S
where Salary > (select avg(Salary)
from orion.staff
where Gender=S.Gender);
Ключевые слова ANY/ALL
• ANY – истинно, если выражение истинно для некоторого из значений
• ALL – истинно, если выражение истинно для каждого из значений
Выражение Эквивалент
= ANY(20,30,40) =20 или =30 или =40
> ANY(20,30,40) > 20
Выражение Эквивалент
> ALL(20,30,40) > 40
< ALL(20,30,40) < 20
Операторы EXISTS/NOT EXISTS
• EXISTS – истинно, если подзапрос возвращает хотя бы одну запись
• NOT EXISTS – истинно, если подзапрос не возвращает ни одной записи
select Employee_ID, Job_Title
from orion.sales
where not exists
(select *
from orion.order_fact
where sales.Employee_ID=
order_fact.Employee_ID);
Встроенные представления
• SQL-запрос, указанный в скобках в выражении FROM (в операторе SELECT)
• Используется при построении сложных запросов
SELECT *
FROM (запрос встроенного представления)
<AS alias>
… ;
Пример сложного запроса
• Задача: Получить данные о начальниках сотрудников, продавших в 2011 году продукт 'Expedition Zero'select Employee_Name format=$25. as Name, City
from orion.employee_addresseswhere Employee_ID in
(select Manager_ID from orion.employee_organization as o,
(select distinct Employee_IDfrom orion.order_fact as of,
orion.product_dim as pwhere of.Product_ID=p.Product_ID
and year(Order_Date)=2011 and Product_Name contains
'Expedition Zero') as IDwhere o.Employee_ID=ID.Employee_ID);
Подзапрос
Встроенный запрос
Операции с несколькими таблицами
• «По горизонтали» (combining data horizontally) SQL Joins / Соединения Записи одной таблицы сопоставляются с записями
другой таблицы К колонкам в записях одной таблицы добавляются
колонки из другой таблицы
• «По вертикали» (combining data vertically) SQL Set Operators / Объединения Записи таблиц рассматриваются как множества Операции с множествами
Типы соединений (1)
• Декартово произведение (Cartesian Product) Все записи одной таблицы – со всеми записями другой Количество записей – произведение количеств записей
• Внутреннее соединение
• Внешние соединения
RIGHTLEFT FULL
INNER
Типы соединений (2)
• Декартово произведение (Cartesian Product)
• Внутреннее соединение
• Внешние соединения
select * from customers, transactions;
select * from customers, transactionswhere customers.ID=transactions.ID;
select * from customers as c
left join transactions as t on c.ID=t.ID;
select coalesce(c.ID,t.ID) as ID,c.Name, t.Action, t.Amount
from customers c full join transactions t on c.ID=t.ID;
Без условия
Условие сопоставления
записей
Типы объединений (1)
UNION
RS1
RS2
OUTER UNION
RS1
RS2
EXCEPT
RS1
RS2
INTERSECT
RS1
RS2
SELECT …UNION | OUTER UNION | EXCEPT | INTERSECT <ALL><CORR> SELECT …;
Типы объединений (2)
• UNION – с исключением дубликатов, колонки в исходных данных сопоставляются по позициям
• OUTER UNION – без исключения дубликатов, колонки в исходных данных сопоставляются по именам, несопоставленные колонки сохраняются
/* Результаты продаж в 1 кв. и во 2 кв. */select * from ecsql1.qtr1_2007outer unionselect * from ecsql1.qtr2_2007 ;
/* Список студентов, прошедших обучение по курсу А или по курсу Б */
select ID, Name from work.train_aunionselect ID, Name from work.train_b ;
Работа с таблицами
• CREATE TABLE – создание таблицы• DESCRIBE TABLE – получение описания таблицы• ALTER TABLE – модификация таблицы• DROP TABLE – удаление таблицы
Аналогичные операции с представлениями (VIEW)
Создание новой таблицы (1)
• Три метода создания новой таблицы
Метод 1 Из существующей таблицы (с данными)
Метод 2 Из существующей таблицы (без данных)
Метод 3 Создать пустую таблицу кодом SQL
PROC SQL
PROC SQL
PROC SQL
Создание новой таблицы (2)
• Три метода создания новой таблицы
Метод 1 Из существующей таблицы (с данными)
Метод 2 Из существующей таблицы (без данных)
Метод 3 Создать пустую таблицу кодом SQL
CREATE TABLE table-name ASSELECT …;
CREATE TABLE table-name(column-name type(length)<, ...column-name type(length)> );
CREATE TABLE table-name-2 LIKE table-name-1;
Типы колонок
• Можно использовать типы данных ANSI SQL
ANSI Type
Resulting
SAS Type
Default
Length
Default
Format
CHAR(n) Character 8 $w.
VARCHAR(n) Character 8 $w.
INTEGER Numeric 8 BEST.
SMALLINT Numeric 8 BEST.
DECIMAL Numeric 8 BEST.
NUMERIC Numeric 8 BEST.
FLOAT Numeric 8 BEST.
REAL Numeric 8 BEST.
DOUBLE PRECISION Numeric 8 BEST.
DATE Numeric 8 DATE.
Изменение структуры таблицы
• Добавление новой колонки
• Удаление колонки
• Изменение атрибутов колонки
ALTER TABLE table-nameADD column-definition< , … column-definition>;
ALTER TABLE table-nameDROP column-1<, …column-2> ;
ALTER TABLE table-nameMODIFY column-definition<, …column-definition>;
alter table work.employee_payrollmodify Bonus num format=comma8.2,
Level char(10) label='Employee Level';
Операции с записями (1)
• INSERT – вставка записей в таблицу По одной записи INSERT INTO … VALUES | SET … Множество записей INSERT INTO … SELECT…
• UPDATE – модификация записей в таблице• DELETE– удаление записей из таблицы
/* Скидка на товары заданного поставщика */insert into discounts
(Product_ID, Discount, Start_Date, End_Date)select distinct Product_ID,.35,
'01MAR2013'd,'31MAR2013'dfrom orion.Product_Dimwhere Supplier_Name contains
'Pro Sportswear Inc';
Операции с записями (2)
Метод Описание Синтаксис
A Один оператор на каждую
запись с использованием
пар «колонка=значение»
INSERT INTO table-name
SET column-name=value,
column-name=value,...;
B Один оператор на каждую
запись с использованием
порядка следования
колонок
INSERT INTO table-name
<(column list)>
VALUES (value,value,...);
C Запрос, возвращающей
множество записей, с
использованием порядка
следования колонок
INSERT INTO table-name
<(column list)>
SELECT columns
FROM table-name;
• Методы вставки записей в таблицу
Операции с записями (3)
• UPDATE – модификация записей в таблице
• DELETE – удаление записей из таблицы
update work.salesset Salary=Salary*1.05where Job_Title='Sales Rep. I';
delete from work.staff
where Emp_Term_Date is not missing;
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
Доступ к другим СУБД (1)
Используются продукты SAS/ACCESS (модули доступа к внешним данным) К реляционным СУБД (Oracle, DB2, Sybase, Teradata, …) К нереляционным СУБД (ADABAS, IDMS, ...) К стандартным протоколам (ODBC, OLE DB) К файловым форматам (DBF, Excel)
Два способа работы с внешними базами и источниками данных Сквозные запрос к базам данных (SQL Pass-Through Facility) Назначение библиотек на внешние базы данных
(SAS/ACCESS LIBNAME Statement)
Доступ к другим СУБД (2) Сквозные запросы к базам данных
Назначение библиотеки на внешнюю базу данных
После назначения библиотеки на СУБД с таблицами из этой библиотеки в SAS можно работать как с наборами данных
LIBNAME <имя> DBMS <опции подключения к СУБД>;
PROC SQL;CONNECT TO DBMS (<опции подключения к СУБД>)
<AS alias>;
SELECT * FROM CONNECTION TO DBMS( SELECT-запрос для внешней СУБД );
EXECUTE ( SQL-запрос для внешней СУБД ) BY DBMS;
DISCONNECT FROM DBMS;QUIT;
Доступ к другим СУБД (3) Сквозной запрос к базе данных Oracle
Назначение библиотеки на базу данных Oracle
Чтобы не указывать пароли в открытом виде, можно использовать пароль, закодированный PROC PWENCODE
proc sql;connect to oracle (user=u1 pw=xxx path=hrd);select * from connection to oracle(select * from employees;where dept='CSR010');
disconnect from oracle;quit;
libname mydblib oracle user=u1 pw=xxx path=hrd;proc sql;
select * from mydblib.employees where dept='CSR010';
quit;
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
PROC SQL и макроязык (1)
• Текст PROC SQL проходит обработку макропроцессором SAS
• Текст PROC SQL проходит обработку макропроцессором SAS (т.е. можно использовать макропеременные, макрофункции, макросы)
• PROC SQL может создавать пользовательские макропеременные (SELECT … INTO …)
• PROC SQL возвращает информацию с использованием автоматических макропеременных (SQLOBS, SQLRC, SQLOOPS, SQLEXITCODE, SQLXRC, SQLXMSG)
PROC SQL и макроязык (2)
• Примеры использования макропеременных
%let country=US;proc sql;
create table work.&country._employees as select * from ecsql1.employeeswhere country="&country";
quit;
%let stat=min;proc sql;
select * from ecsql1.employeesgroup by genderhaving salary=&stat(salary);
quit;
PROC SQL и макроязык (3)options mprint mlogic symbolgen;%MACRO QTR12;proc sql;%do i=1 %to 2;select * from ecsql1.qtr&i._2007;%end;
quit;%MEND;%QTR12
MLOGIC(QTR12): Beginning execution.MPRINT(QTR12): proc sql;MLOGIC(QTR12): %DO loop beginning; index variable I; start value is 1; stop value is 2; by value is 1.
SYMBOLGEN: Macro variable I resolves to 1MPRINT(QTR12): select * from ecsql1.qtr1_2007;MLOGIC(QTR12): %DO loop index variable I is now 2; loop will iterate again.
SYMBOLGEN: Macro variable I resolves to 2MPRINT(QTR12): select * from ecsql1.qtr2_2007;MLOGIC(QTR12): %DO loop index variable I is now 3; loop will not iterate again.
MPRINT(QTR12): quit;NOTE: PROCEDURE SQL used (Total process time):
real time 0.05 seconds. . .MLOGIC(QTR12): Ending execution.
PROC SQL и макроязык (4)
• Создание макропеременных (несколько вариантов)
proc sql;
select avg(salary) into :avgsal
from ecsql1.employees;
select min(salary),max(salary)
into :minsal, :maxsal
from ecsql1.employees;
select distinct upcase(country)
into :country1 - :country100
from ecsql1.employees;
select distinct upcase(country)
into :clist separated by ', '
from ecsql1.employees;
quit;
%put _USER_;
GLOBAL AVGSAL 40476.92
GLOBAL MAXSAL 433800
GLOBAL MINSAL 22710
GLOBAL COUNTRY1 AU
GLOBAL COUNTRY2 US
GLOBAL CLIST AU, US
GLOBAL SQLOBS 2
GLOBAL SQLRC 0
Таблицы с метаданными
• Dictionary tables – содержат информацию о структурах данных SAS (свыше 30 таблиц) DICTIONARY.TABLES – информация о таблицах DICTIONARY.COLUMNS – информация о колонках DICTIONARY.MEMBERS – информация объектах в
библиотеках SAS
• Создаются автоматически SAS, доступ Read-Only
• Доступны также как view в библиотеке SASHELP (например, SASHELP.VTABLE)
select memname 'Table Name', nobs, nvar, crdatefrom dictionary.tableswhere libname='ECSQL1';
План лекции
Краткая информация о языке SQL Особенности реализации SQL в SAS Основные операторы PROC SQL Доступ к другим СУБД PROC SQL и макроязык Задания
Задания
• 3 (три) задания • Решение должно включать ответы на
вопросы и соответствующие программы• Срок сдачи - до 23:59:59 10 ноября 2015 г.• Программы присылать на адрес
[email protected] пометкой в теме письма:
Задание спецкурс ВМК (SQL)• Решения и результаты будут опубликованы
на странице с лекциями: http://tiny.cc/msu_sas
66
Задание 1В наборе данных ecsql1.employees содержится информация о сотрудниках компании.В наборе данных ecsql1.employee_organization содержится информация о структуре компании (иерархия «начальник -подчиненный»). Напишите SQL-запросы, которые позволят ответить на следующие вопросы.Насколько в среднем начальники получают большую зарплату по сравнению с непосредственными подчиненными(в процентном выражении):1) В целом по компании?2) В разрезе каждого подразделения?(отсортировать записи по убыванию показателя увеличения зарплаты)
Задание 2В наборе данных ecsql1.employees содержится информация о сотрудниках компании. Предположим, что сегодня 01.01.2007. 1) Необходимо с помощью PROC SQL сформировать приведенный ниже отчет (возрастные категории — по 3 года).2) Сколько всего строк будет в отчете?3) Для каких возрастных категорий (у мужчин и у женщин) средняя зарплата самая высокая?
Возрастная категория (от)
Возрастная категория (до)
Средняя зарплата у мужчин
Средняя зарплата у женщин
18 21 $28,728 $28,283
21 24 $27,029 $29,201
… … … …
Задание 3В наборе данных ecsql1.employees содержится информация о сотрудниках компании с указанием страны и города. В наборе данных ecsql1.order_fact содержится информация о заказах.
1) Необходимо написать программу, которая создаст таблицы work.order_fact_<Страна>_<Город>, содержащие данные по заказам, связанным с сотрудниками подразделения компании в соответствующем городе. Количество стран и городов заранее не известно. Если имя города содержит дефис или пробел, из имени создаваемой таблицы эти символы нужно удалить. Необходимо использовать только PROC SQL и макроязык SAS.
2) Сколько будет создано таблиц? Сколько в каждой записей?
3) Сколько проходов по набору данных ecsql1.order_factпотребуется выполнить?
4) Перепишите программу с использованием DATA Step так, чтобы по набору данных ecsql1.order_fact было только 2 прохода.