Задача 00A. Выборка двух полей

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Схема реляционной БД содержит таблицу Clients, в которой хранится список клиентов с полями:

Требуется вывести только ID и фамилию клиента.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 01A. Выборка всех полей

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Схема реляционной БД содержит таблицу SomeTable структура которой неизвестна. Требуется выбрать все поля всех записей данной таблицы.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 01B. Телефонный код города

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Требуется из таблицы TelephoneCodesOfCities со структурой:

выбрать телефонный код города "krasnoyarsk". Города хранятся в БД в нижнем регистре.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 01C. Суммирование полей

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

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

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 01D. Добавление городов

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В таблицу Cities нужно добавить города Vladivostok, Novosibirsk, Lesozavodsk. Для города Vladivostok нужно указать население: 604901. Структура таблицы:

Решение следует представить в виде текстового файла, содержащего несколько SQL-запросов. Запросы следует завершать символом ';'.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 01E. Деловые люди (SQL)

Входной файл:data.csv   Ограничение времени:1 сек
Выходной файл:test.log   Ограничение памяти:256 Мб
Максимальный балл:4  

Условие

Требуется на языке SQL реализовать запрос, который обращается к таблице data и возвращает список ID пользователей, совершивших 20 и более международных звонков.

В таблице data присутствуют следующие поля:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос. При отправке следует выбирать среду разработки Python.

Ограничения

Для работы с базой данных используется SQLite3.


Задача 02A. Создание таблицы с заметками

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В пустой БД требуется создать таблицу Notes со структурой:

ID: INTEGER;
Note: TEXT;
TimeOfCreation: DATETIME;
ProgressMade: REAL;
Status: TEXT.

Дополнительно, нужно прописать параметры полей:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02B. Добавление поля в таблицу

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В таблицу Customers реляционной БД требуется добавить новое поле Email типа "TEXT", со значение по умолчанию "@mail.ru".

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02C. Удаление тестовой таблицы

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Необходимо удалить таблицу TestTable из реляционной БД.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02D. Классификация целых чисел

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

База данных представлена одной таблицей Numbers, в которой хранится набор целых чисел Value. Требуется классифицировать числа на положительные "positive", отрицательные "negative" и ноль "zero". Ниже представлено детальное DDL-описание таблицы:


TABLE Numbers ( -- хранит список целых чисел
    Value INTEGER NOT NULL -- целое число
                DEFAULT (0) 
);

Результатом выполнения запроса должен быть список кортежей (Value, Classification). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02E. Выборка уникальных значений

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Требуется из таблицы Books со структурой:

вывести список уникальных инициалов авторов.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02F. Поиск клиентов по первой букве

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Для таблицы Customers нужно выбрать имена клиентов начинающихся с буквы "G" и отсортировать их по убыванию возраста. Структура таблицы:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02G. Опытные сотрудники

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Требуется из таблицы Employees выбрать ФИО сотрудников мужчин в возрасте от 35 до 70 включительно. Поля таблицы Employees:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02H. Удаление NULL-значений

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Из таблице Magazines нужно удалить все записи, где поле Edition имеет значение "NULL".

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 02I. Обновление значений поля

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В таблице Animals нужно изменить все значения поля Sex с длинных вариантов: "male", "female" на короткие: "m", "w". Для прочих значений поля Sex, нужно указать "unknown", если они не "NULL".

Решение следует представить в виде текстового файла, содержащего несколько SQL-запросов.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 03A. Создание простой базы контактов

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Требуется по UML-схеме создать базу данных при помощи DDL-скрипта на языке SQL. При описании полей таблицы следует указывать только тип значений и связи. Поле id следует сделать первичным ключом. Схема БД в UML-нотации:

Решение следует представить в виде текстового файла, содержащего несколько SQL-запросов.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 03B. Занятые парковочные места

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

На автостоянке эксплуатируется БД, в которой содержится информация о том, какому автомобилю из Cars принадлежит то или иное паковочное место из ParkingPlaces. Для реализации связи "многие ко многим", была заведена таблица CarsParkings, где автомобилю сопоставляется конкретное пронумерованное место на стоянке. Каждый автомобиль может иметь несколько парковочных мест. Ниже представлено детальное DDL-описание таблиц:


TABLE Cars ( -- машины
    ID        INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                      NOT NULL,
    CarNumber TEXT    NOT NULL -- номер автомобиля
                      UNIQUE
);

TABLE ParkingPlaces ( -- парковочные места
    ID            INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                          NOT NULL,
    ParkingNumber TEXT    NOT NULL -- номер парковочного места
                          UNIQUE
);

TABLE CarsParkings ( -- принадлежность парковочного места автомобилю
    CarID     INTEGER REFERENCES Cars (ID) -- идентификатор автомобиля
                      NOT NULL,
    ParkingID INTEGER REFERENCES ParkingPlaces (ID) -- идентификатор парковочного места
                      NOT NULL,
    UNIQUE (
        CarID,
        ParkingID
    )
);

Требуется вывести все автомобили, у которых есть парковочные места. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (CarNumber, ParkingNumber). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04A. Агрегатные функции

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

База данных представлена одной таблицей Numbers, в которой хранится набор целых чисел Value. Требуется вычислить минимальное и максимальное значения, сумму и количество чисел в таблице, среднее значение среди всех чисел. Ниже представлено детальное DDL-описание таблицы:


TABLE Numbers ( -- хранит список целых чисел
    Value INTEGER NOT NULL -- целое число
                DEFAULT (0)
);

Результатом выполнения запроса должен быть единственный кортеж (MinValue, MaxValue, SumValue, CountValue, AvgValue). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04B. Лучшие продавцы товаров

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Руководитель магазина решил наградить 10 самых продуктивных сотрудников. Для этого ему нужен запрос, который посчитает суммарную выручку каждого сотрудника магазина, отсортирует по убыванию суммарной выручки и возьмёт первые 10 кортежей. Выводить следует только продающих сотрудников. Требуется по фрагменту схемы реляционной БД составить данный запрос на языке SQL.

Описание таблиц на схеме:

Результатом выполнения запроса должен быть список кортежей (SellerFullName, TotalRevenue, CountOfSales) отсортированный по убыванию значений поля TotalRevenue и содержащий максимум 10 записей. Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04C. Остатки товаров на складе

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Товарооборот магазина одежды фиксируется в базе данных этой компании. БД хранит список товаров Products, список категорий товаров Categories, список купленных у поставщиков товаров PurchaseItems и список проданных клиентам товаров SalesItems. У товара поле CategoryID может быть NULL, если товар не подходи ни под одну из существующих категорий. Если товар ни разу не закупался и не продавался, то его следует игнорировать. Ниже представлено детальное DDL-описание таблиц:


TABLE Categories ( -- хранит список категорий товаров
    ID   INTEGER NOT NULL -- уникальный идентификатор
                 PRIMARY KEY AUTOINCREMENT,
    Name TEXT    UNIQUE -- наименование категории
                 NOT NULL
);

TABLE Products ( -- хранит список товаров
    ID           INTEGER NOT NULL -- уникальный идентификатор
                         PRIMARY KEY AUTOINCREMENT,
    Title        TEXT    UNIQUE -- название товара
                         NOT NULL,
    CategoryID   INTEGER, -- идентификатор категории
    SellingPrice REAL    CHECK (SellingPrice > 0) -- розничная цена продажи товара
                         NOT NULL,
    FOREIGN KEY (
        CategoryID
    )
    REFERENCES Categories (ID) ON DELETE CASCADE
);

TABLE PurchaseItems ( -- хранит список товаров, купленных у поставщиков
    ID             INTEGER NOT NULL -- уникальный идентификатор
                           PRIMARY KEY AUTOINCREMENT,
    ProductID      INTEGER NOT NULL, -- идентификатор товара
    QuantityBought INTEGER NOT NULL -- количество купленного товара (штук)
                           CHECK (QuantityBought > 0)
                           DEFAULT (1),
    FOREIGN KEY (
        ProductID
    )
    REFERENCES Products (ID) ON DELETE CASCADE
);

TABLE SalesItems ( -- хранит список проданных клиентам товаров
    ID           INTEGER NOT NULL -- уникальный идентификатор
                         PRIMARY KEY AUTOINCREMENT,
    ProductID    INTEGER NOT NULL, -- идентификатор товара
    QuantitySold INTEGER NOT NULL -- количество проданного товара (штук)
                         CHECK (QuantitySold > 0)
                         DEFAULT (1),
    FOREIGN KEY (
        ProductID
    )
    REFERENCES Products (ID) ON DELETE CASCADE
);

Требуется вывести список закончившихся товаров. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (Title, CategoryName, SellingPrice) для товаров с нулевым остатком, отсортированный по убыванию розничных цен продажи. Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04D. Лидеры продаж

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Для таблицы Sales со структурой:

нужно составить запрос, выводящий 10 наиболее продаваемых наименований товаров.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04E. Количество сотрудников в отделах

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

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


TABLE Employees ( -- хранит список сотрудников
    ID           INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                         NOT NULL,
    FullName     TEXT    NOT NULL, -- ФИО сотрудника
    Age          INTEGER CHECK (Age >= 0), -- возраст сотрудника
    DepartmentID INTEGER REFERENCES Departments (ID) -- идентификатор департамента
);

TABLE Departments ( -- хранит список департаментов
    ID   INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                 NOT NULL,
    Name TEXT    NOT NULL -- название департамента
                 UNIQUE
);

Требуется из таблицы Departments выбрать все департаменты и указать какое количество сотрудников числится в каждом из них. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (DepartmentName, TotalPeople). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04F. Сотрудники с низкой зарплатой

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Менеджеру по персоналу поручили определить сотрудников, которые могут уволиться из-за низкой заработной платы. Он считает зарплату низкой, если она строго меньше средней. БД содержит список сотрудников Employee, список должностей Positions и список зарплат Salaries. Работник компании может занимать несколько должностей и получать зарплату, состоящую из размера полной ставки Salary умноженную на долю от ставки SalaryPercentage. Ниже представлено детальное DDL-описание таблиц:


TABLE Employees ( -- хранит список сотрудников
    ID       INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                     NOT NULL,
    FullName TEXT    NOT NULL -- ФИО сотрудника
);

TABLE Positions ( -- хранит список должностей
    ID     INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                   NOT NULL,
    Title  TEXT    NOT NULL -- название должности
                   UNIQUE,
    Salary INTEGER NOT NULL -- полная ставка заработной платы (в руб.)
                   CHECK (Salary > 0)
);

TABLE Salaries ( -- хранит список зарплат
    ID               INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                             NOT NULL,
    EmployeeID       INTEGER NOT NULL -- идентификатор сотрудника
                             REFERENCES Employees (ID),
    PositionID       INTEGER NOT NULL -- идентификатор должности
                             REFERENCES Positions (ID),
    SalaryPercentage REAL    NOT NULL -- получаемая доля от полной ставки з. п.
                             CHECK (SalaryPercentage BETWEEN 0 AND 1)
                             DEFAULT (1),
    UNIQUE (
        EmployeeID,
        PositionID
    )
);

Требуется вывести список сотрудников, получающих низкую (ниже средней по организации) зарплату. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (EmployeeFullNames, SumSalary), отсортированный по возрастанию поля SumSalary. Описание полей запроса:

Значения поля SumSalary должны быть округлены до ближайших целых чисел.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04G. Прогресс обработки заявок

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В сервисных центрах ИТ-компаний активно используется система управления инцидентами. Клиенты СЦ создают задачи task, где описывают возникшие проблемы и отправляют их сотрудникам СЦ. Задача имеет статус, который отражает степень её выполнения. Только что поступившая задача от клиента помечается как "new", когда задача полностью выполнена, сотрудники СЦ переводят её в статус "completed". Задача может находиться в любом статусе несколько раз, количество статусов не ограничено. Аналитик СЦ хочет оценить эффективность других сотрудников СЦ. Для это необходим SQL-запрос который возвращает совокупное количество задач в статусах "new" и "completed" для каждого дня за последние 30 дней (считать от времени создания последней задачи) в порядке следования дат в календаре. Требуется составить данный запрос.

Результатом выполнения запроса должен быть список кортежей (date, number_of_new, number_of_completed) отсортированный по возрастанию значений поля date и содержащий количество задач в статусах "new" и "completed", построенных за каждый день функционирования системы в течении 30 дней с даты самой актуальной задачи. Если одна и та же задача перешла в два разных статуса в один момент времени, то учитывается переход с максимальным id записи. Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

2017-12-29 1 0
2018-01-01 1 0
2018-01-02 2 0

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04H. Фантастические звери и места их обитания

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Ньют Саламандер путешествует по миру, собирая информацию о редких видах магических животных. Результаты своих исследований он хранит в БД, состоящей из следующих таблиц:

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

Результирующая таблица должна состоять из двух столбцов:
название животного (BEASTS.NAME) и количество континентов, на которых встречаются представители данного вида.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 04I. Итоги спортивных соревнований

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Одной спортивной организации понадобилось сформировать отчет обо всех когда-либо проведенных ею соревнованиях.

Все данные о прошедших соревнованиях и их результатах хранятся в базе данных, состоящей из следующих таблиц:

CONTESTS (соревнования) ROWI INTEGER PRIMARY KEY AUTOINCREMENT, -- ID соревнования ... TEAMS (команды) ROWI INTEGER PRIMARY KEY AUTOINCREMENT, -- ID команды KIND INTEGER NOT NULL, -- ID дисциплины ... POINTS (оценки) CONTEST INTEGER REFERENCES CONTESTS(ROWI), TEAM INTEGER REFERENCES TEAMS(ROWI), MARK INTEGER NOT NULL, ...

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

В качестве ответа необходимо вывести таблицу, состоящую из следующих столбцов:

  1. ID соревнования,
  2. ID дисциплины,
  3. номер места среди участников текущей дисциплины (начиная с единицы),
  4. ID команды.

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

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 05A. Сотрудники и пациенты больницы

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Главврачу необходимо знать актуальную информацию о наличии страховых медицинских полисов у мед. работников и пациентов. В БД больницы хранится список врачей Doctors, список пациентов Patients, список личной информации о физ. лицах PersonalData и список полисов ОМС MedicalInsurance. При этом, заболевший врач может быть одновременно и пациентом больницы. В таблице PersonalData хранится информация обо всех работавших в больнице врачах и обо всех обращавшихся за мед. помощью пациентах. В таблицах Doctors и Patients содержится только актуальная информация о врачах и пациентах, но без личных сведений. В таблице MedicalInsurance у актуальных полисов значение поля Status равно "active", в противном случае - "deactivated"; у врачей и пациентов может и вовсе не быть полисов ОМС. Ниже представлено детальное DDL-описание таблиц:


TABLE Doctors ( -- хранит список работающих врачей
    ID             INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                           NOT NULL,
    PersonalDataID INTEGER NOT NULL -- идентификатор персональной информации
                           REFERENCES PersonalData (ID)
);

TABLE Patients ( -- хранит список лечащихся пациентов
    ID             INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                           NOT NULL,
    PersonalDataID INTEGER NOT NULL -- идентификатор персональной информации
                           REFERENCES PersonalData (ID)
);

TABLE PersonalData ( -- хранит персональную информацию по врачам и пациентам
    ID                 INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                               NOT NULL,
    FullName           TEXT    NOT NULL, -- ФИО лица
    MedicalInsuranceID INTEGER REFERENCES MedicalInsurance (ID) -- идентификатор полиса ОМС
                               UNIQUE
);

TABLE MedicalInsurance (
    ID     INTEGER      PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                        NOT NULL,
    Status TEXT         NOT NULL -- статус полиса ОМС
                        DEFAULT ('active')
                        CHECK (Status IN ('active', 'deactivated') ),
    Number VARCHAR (16) NOT NULL -- номер полиса ОМС
                        UNIQUE
);

Требуется подсчитать количество постояльцев (врачей и пациентов) больницы, у которых есть актуальные полисы ОМС. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть один кортеж (TotalPeopleWithMI), где TotalPeopleWithMI - количество постояльцев больницы с актуальными полисами ОМС.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 05B. Восстановление списка файлов

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Российский видеоблогер Илья Мэддисон решил выпустить обзор новой компьютерной игры. Но, при установки её на компьютер, его Windows 10 не выдержала нагрузки и "слетела", так как недавно получила новый накопительный пакет обновлений. Помогите Илье восстановить данные с диска, написав SQL-запрос к таблице файловой системы.

Файловая системы содержит три типа записей: "root" - корень диска, "dir" - директория, "file" - файл; имеет следующую структуру:

Результатом выполнения запроса должна быть список полных имен full_name файлов, директорий и букв диска. Чтобы отличить типы объектов, нужно выводить символ ":" в конце буквы диска, "\" в конце названия директории, значение поля extension через "." в конце имени файла. В качестве разделителя между объектами используется символ "\", список имен должен быть отсортирован по возрастанию id.

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 05C. Сотрудники ИТ-отдела

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Студент ДВФУ проходил производственную практику в ИТ-отделе предприятия. Должность руководителя отдела называется PC Principal. По окончании практики студенту требуется составить отчет, частью которого является описание организационной структуры ИТ-отдела предприятия. Он решил воспользоваться локальной БД предприятия, которая хранит в одной таблице Employees список всех сотрудников вместе с иерархией подчиненности (для каждого сотрудника указывается его непосредственный начальник). Для учредителя компании поле ChiefID равно NULL. Название занимаемых должностей вынесено в отдельную таблицу Positions. У линейного персонала может быть не указана должность. Ниже представлено детальное DDL-описание таблиц:


TABLE Employees ( -- хранит список сотрудников
    ID         INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                       NOT NULL,
    FullName   TEXT    NOT NULL, -- ФИО сотрудника
    PositionID INTEGER REFERENCES Positions (ID), -- должность сотрудника
    ChiefID    INTEGER REFERENCES Employees (ID) -- непосредственный начальник
);

TABLE Positions ( -- хранит список должностей
    ID    INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                  NOT NULL,
    Title TEXT    UNIQUE -- название должности
                  NOT NULL
);

Требуется создать представление ShowITEmployees, вызов которого вернут список всех сотрудников ИТ-отдела во главе с PC Principal. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (ID, FullName, Position, ChiefID). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 05D. Инциденты тех. поддержки

Автор:О. Константинов   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

В БД хранится список специалистов тех. поддержки Specialists, список инцидентов Incidents и список назначений специалиста тех. поддержки на инцидент Assignment для дальнейшего устранения последствий инцидента. За устранение последствий каждого инцидента отвечает единственный специалист тех. поддержки. Все инциденты обрабатываются специалистами в порядке регистрации инцидентов в БД. Устраненные инциденты никак не помечаются, вместо этого у каждого специалиста есть поле Resolved, которое хранит количество устраненных инцидентов. Ниже представлено детальное DDL-описание таблиц:


TABLE Specialists ( -- хранит список специалистов тех. поддержки
    ID       INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                     NOT NULL,
    FullName TEXT    NOT NULL, -- ФИО специалиста
    Resolved INTEGER NOT NULL -- количество обработанных инцидентов
                     CHECK (Resolved >= 0)
                     DEFAULT (0)
);

TABLE Incidents ( -- список всех инцидентов
    ID          INTEGER PRIMARY KEY AUTOINCREMENT -- уникальный идентификатор
                        NOT NULL,
    Title       TEXT    NOT NULL, -- заголовок инцидента
    CreatedAt   DATETIME NOT NULL,
    Description TEXT -- описание инцидента
);

TABLE Assignment ( -- список назначений инцидентов специалистам
    SpeсialistID INTEGER NOT NULL -- идентификатор специалиста
                         REFERENCES Specialists (ID),
    IncidentID   INTEGER NOT NULL -- идентификатор инцидента
                         REFERENCES Incidents (ID),
    UNIQUE (
        SpeсialistID,
        IncidentID
    )
);

Требуется для каждого специалиста тех. поддержки вывести 5 ближайших к устранению инцидентов. Результат отсортировать по SpeсialistID, затем по порядку обработки. Если специалист устранил все инциденты, то его следует игнорировать. Схема БД в UML-нотации:

Результатом выполнения запроса должен быть список кортежей (FullName, IncidentTitle). Описание полей запроса:

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.


Задача 05E. График конференции

Автор:А. Баранов   Ограничение времени:1 сек
Входной файл:test.db   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Молодой программист Вася прибыл на международную IT-конференцию и почти сразу же озаботился следующей проблемой.

График мероприятий конференции хранится в БД. Основу такой БД составляет таблица EVENTS, имеющая следующий вид:

ROWI INTEGER PRIMARY KEY AUTOINCREMENT, HEAD DATE NOT NULL CHECK (HEAD < TAIL), -- начало мероприятия TAIL DATE NOT NULL -- конец мероприятия

и таблица KWORDS, в которой каждому мероприятию ставится в соответствие набор ключевых слов.

EVENT INTEGER REFERENCES EVENTS(ROWI), WORD INTEGER NOT NULL, PRIMARY KEY (EVENT, WORD)

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

Напишите SQL-запрос с параметром, выполняющий выборку таких мероприятий.

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

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.
Вместо списка ключевых слов в тексте запроса должен присутствовать символ (:words).

Формат входного файла

Пример тестовой БД.

Ограничения

Полагается, что для работы с базой данных используется SQLite3.

Значения типа DATE задаются в виде строк, имеющих следующий формат: YYYY-MM-DD HH:MM


Задача 06A. Лабораторные работы

Максимальный балл:100   Ограничение времени:1 сек
  Ограничение памяти:512 Мб

Задача 06B. Коллоквиум

Максимальный балл:10  

Условие

Коллоквиум состоит из двух вопросов. Первый вопрос выбирается случайно из списка ниже:

Определение БД и СУБД, типы СУБД, основные функции СУБД, обзор рынка СУБД.Язык SQL: DDL.Язык SQL: SELECT кроме следующего пункта.Язык SQL: SELECT: CTE, VIEW, подзапросы, оконные функции.Язык SQL: Прочий DML.Оптимизация, индексы.Язык SQL: хранимые процедуры и триггеры.Реляционная алгебра.Нормальные формы, нормализация и денормализация.Транзакции, ACID, уровни изоляции.Клиент-серверная архитектура, работа с СУБД из приложений, ORM.Администрирование СУБД, пользователи и доступ.Распределённые СУБД, теорема CAP, Paxos, Raft*. Данный вопрос достаётся только по желанию студента.

Второй вопрос требует спроектировать БД в предметной области, случайно выбранной из списка ниже:

Розничный продуктовый магазинАвиакассаЖелезнодорожная кассаРасписание занятийКинотеатрШвейная фабрикаСтроительная компанияОптовый склад промтоваровАвтомагазинАптекаСайт форумаЛогистическая компания

После взятия билета студент готовится в ответу.

В результате подготовки к первому вопросу должен появиться написанный от руки документ объёмом не более 2 страниц A4. В документе должны быть указаны синтаксические конструкции, формулы, теоремы и прочий материал, необходимый для ответа. Ответ состоит из устного доклада студента, длиной не более 5 минут. Полный текст доклада записывать НЕ нужно. В докладе необходимо максимально кратко упомянуть все важные элементы доставшейся темы/вопроса. После доклада преподаватель задаёт несколько уточняющих вопросов.

В результате подготовки ко второму вопросу должна появиться нарисованная от руки диаграмма классов UML, содержащая 6-10 сущностей. Сущности должны соответствовать основным реляционным отношениям в предлагаемой схеме БД. Поскольку предлагаемые темы довольно широки, студент должен самостоятельно выбрать и обосновать конкретную часть предметной области, которую он выбрал для моделирования. Преподаватель задаёт уточняющие вопросы, просит обосновать принятые проектные решения. Затем преподаватель просит внести в проект 1-2 изменения.

Оценка за каждый вопрос — от 0 до 5 баллов. Студент, полностью правильно ответивший в рамках учебного плана данного курса, получает 4 балла за вопрос. Оценка 5 баллов выставляется за выдающийся ответ, превосходящий требования учебного плана.


Задача 06C. Онлайн-курс

Максимальный балл:1  

Условие

Курс на Open EDU

Задача Z. Четыре злостных пирата

Автор:П. Месенёв   Ограничение времени:1 сек
Входной файл:test.sql   Ограничение памяти:256 Мб
Выходной файл:test.log  
Максимальный балл:1  

Условие

Братья Паша и Миша получили пятёрки на экзамене по базам данных и коротают время в ожидании друзей, играя в морской бой. Паша играет за пиратов и назначил каждой палубе своих кораблей по одному из головорезов. Как большой специалист в области эксплуатации и проектирования баз данных, Паша, разумеется, всю информацию хранит в специально созданной базе данных (DDL-схема которой приведена ниже).

Испанские торговые корабли Миши то и дело грабит Пашин четырёхпалубный флагман. Миша придумал план — назначить награду за головы тех четырёх отморозков, которые им командуют.

Честь мундира не позволяет Мише воспользоваться sqlite-браузером и посмотреть требуемую информацию. Помогите Мише составить запрос к базе данных, который бы вывел имена четырёх пиратов в алфавитном порядке, хозяйничающих на пиратском четырёхпалубном корабле. Известно, что корабли пиратов расположены по правилам классического морского боя.


CREATE TABLE Sector (
    id          INTEGER not null primary key,
    latitude    INTEGER not null,
    longitude   INTEGER not null,
    is_ship     INTEGER not null,
    pirate_name VARCHAR(255)
);

Решение следует представить в виде текстового файла, содержащего единственный SQL-запрос.

Формат входного файла

Пример тестовой БД.

Формат выходного файла

Для тестовой базы корректный запрос вернёт следующее: Dlinnonogiy Hans Kapitan Flint Limmi Ji Smolyanoe ukho

Ограничения

Предполагается, что для работы с базой данных используется SQLite3.


1.045s 0.013s 137