Тест "голосовых" запросов к БД (pagila), версия 0.46 от 2021.08.18
Примеры генерации Sql

Пример №1.1
Пользователь> 1) Покажите всех покупателей с именами вася, коля и петя
Система v0.46> Вывести уникальные значения "клиент", с условием, что имя клиента (без учета регистра) равно или 'ВАСЯ' или 'КОЛЯ' или 'ПЕТЯ', с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where upper(c.first_name) in ('ВАСЯ', 'КОЛЯ', 'ПЕТЯ')
order by 1
Фрагмент | Интерпретация |
---|---|
1) Покажите всех | игнор |
покупателей | клиент |
с именами вася, коля и петя | имя клиента - равно 'ВАСЯ' или 'КОЛЯ' или 'ПЕТЯ' |
Пользователь> отсортируй по первому столбцу по убыванию
Система v0.46> Вывести уникальные значения "клиент", с условием, что имя клиента (без учета регистра) равно или 'ВАСЯ' или 'КОЛЯ' или 'ПЕТЯ', с сортировкой по убыванию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where upper(c.first_name) in ('ВАСЯ', 'КОЛЯ', 'ПЕТЯ')
order by 1 desc nulls last
Фрагмент | Интерпретация |
---|---|
отсортируй по первому столбцу | игнор |
по убыванию | desc |
Пример №1.2
Пользователь> 2) Найдите уникальные цены на аренду
Система v0.46> Вывести уникальные значения "стоимость фильма", с сортировкой по возрастанию стоимости фильма.
select distinct f.rental_rate as "Стоимость фильма"
from FILM f
order by 1
Фрагмент | Интерпретация |
---|---|
2) Найдите | игнор |
уникальные | distinct |
цены на аренду | стоимость фильма |
Пример №1.3
Пользователь> 3) фильмы, у которых цена аренды составляет более двадцати процентов залоговой цены
Система v0.46> Вывести поля "фильм", "стоимость фильма" и "стоимость залога фильма", с условием, что "стоимость фильма" больше "стоимости залога фильма" умножить на 0.2, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.rental_rate as "Стоимость фильма",
f.replacement_cost as "Стоимость залога фильма"
from FILM f
where f.rental_rate > f.replacement_cost * 0.2
order by 1
Фрагмент | Интерпретация |
---|---|
3) | игнор |
фильмы | фильм |
, | игнор |
у которых цена аренды | стоимость залога фильма |
составляет более двадцати процентов залоговой цены | игнор |
Пример №1.4
Пользователь> 4) Найдите фильмы, у которых длительность в интервале от 100 до 110 минут включительно
Система v0.46> Вывести поля "фильм" и "продолжительность фильма", с условием, что "продолжительность фильма" от 100 до 110, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
where f.length between 100 and 110
order by 1
Фрагмент | Интерпретация |
---|---|
4) Найдите | игнор |
фильмы | фильм |
, | игнор |
у которых длительность | продолжительность фильма - [100 .. 110] мин (<-ДЛИТЕЛЬНОСТЬ) |
в интервале от 100 до 110 минут включительно | игнор |
Пользователь> а больше 140 минут
Система v0.46> Вывести поля "фильм" и "продолжительность фильма", с условием, что "продолжительность фильма" больше 140, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
where f.length > 140
order by 1
Фрагмент | Интерпретация |
---|---|
а | игнор |
больше 140 минут | f.length (Number, Minute): продолжительность
длит... - ]140 .. [ мин |
Пример №1.5
Пользователь> 5) клиенты, у которых электронный адрес не в нижнем регистре
Система v0.46> Вывести поля "клиент" и "email клиента", с условием, что "email клиента" не в нижнем регистре, с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
c.email as "Email клиента"
from CUSTOMER c
where lower(c.email) != c.email
order by 1
Фрагмент | Интерпретация |
---|---|
5) | игнор |
клиенты | клиент |
, | игнор |
у которых электронный адрес не в нижнем регистре | email клиента - не в нижнем регистре |
Пример №1.6
Пользователь> 6) Выведите актёров, у которых имя и фамилия начинаются на одну и ту же букву
Система v0.46> Вывести уникальные значения "актер", с условием, что "имя актера" и "фамилия актера" имеют одинаковый первый символ, с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
where substr(a.first_name, 1, 1) = substr(a.last_name, 1, 1)
order by 1
Фрагмент | Интерпретация |
---|---|
6) Выведите | игнор |
актёров | актер |
, | игнор |
у которых имя и фамилия начинаются на одну и ту же букву | имя актера и фамилия актера - совпадение первого символа |
Пример №1.7
Пользователь> Выведите актёров, у которых имя начинается на букву б
Система v0.46> Вывести уникальные значения "актер", с условием, что "имя актера" начинается с 'Б', с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
where upper(a.first_name) like 'Б%'
order by 1
Фрагмент | Интерпретация |
---|---|
Выведите | игнор |
актёров | актер |
, | игнор |
у которых имя начинается на букву б | имя актера - like 'Б%' |
Пример №1.8
Пользователь> 7) Есть ли фильмы, в сюжете которых фигурируют кошки?
Система v0.46> Вывести поля "фильм" и "сюжет фильма", с условием, что "сюжет фильма" содержит подстроку 'КОШКИ' или 'КОШКА', с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.description as "Сюжет фильма"
from FILM f
where position('КОШКИ' in upper(f.description)) > 0
or position('КОШКА' in upper(f.description)) > 0
order by 1
Фрагмент | Интерпретация |
---|---|
7) Есть ли | игнор |
фильмы | фильм |
, | игнор |
в сюжете которых фигурируют кошки | сюжет фильма - содержит подстроку 'КОШКИ' |
? | игнор |
Пользователь> фильмы с сюжетом про мышек
Система v0.46> Вывести поля "фильм" и "сюжет фильма", с условием, что "сюжет фильма" содержит подстроку 'МЫШЕК' или 'МЫШКА', с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.description as "Сюжет фильма"
from FILM f
where position('МЫШЕК' in replace(upper(f.description), 'Ё', 'Е')) > 0
or position('МЫШКА' in upper(f.description)) > 0
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
с сюжетом про мышек | сюжет фильма - содержит подстроку 'МЫШЕК' |
Комментарий: Поиск слова - это более сложный поиск, чем подстроки. Здесь если текст содержит "лукошки", тоже найдёт. Но средствами SQL нельзя реализовать нормальный полнотекстовый поиск, поэтому лучше не получится. Хотя можно ещё сюда добавить разные падежи, но надо ли...
Пример №1.9
Пользователь> покажи всех клиентов без адреса электронной почты
Система v0.46> Вывести уникальные значения "клиент", с условием, что "email клиента" пустой или "email клиента" равно '', с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where c.email is null
or c.email = ''
order by 1
Фрагмент | Интерпретация |
---|---|
покажи всех | игнор |
клиентов | клиент |
без адреса электронной почты | email клиента пусто |
Пример №1.10
Пользователь> Фильмы этого десятилетия
Система v0.46> Вывести уникальные значения "фильм", с условием, что "год выхода фильма" от 2020 до 2029, с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where f.release_year between 2020 and 2029
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
этого десятилетия | год выхода фильма - текущий декада (2020.01.01-2029.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select distinct f.title as "Фильм" from FILM f where f.release_year between 2000 and 2009 order by 1 | select distinct f.title as "Фильм" from FILM f where f.release_year between 2020 and 2029 order by 1 |
Пример №1.11
Пользователь> Вывести список фильмов с возрастным рейтингом 18, длительностью более 1 часа и годам выхода не позднее 2000 года. Результат отсортируйте по убыванию длительности
Система v0.46> Вывести поля "фильм" и "продолжительность фильма", с условием, что "18 плюс фильма" и "продолжительность фильма" больше 60 и "год выхода фильма" меньше или равно 2000, с сортировкой по убыванию продолжительности фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
where f.rating = 'NC-17'
and f.length > 60
and f.release_year <= 2000
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
Вывести список | игнор |
фильмов | фильм |
с возрастным рейтингом 18 | 18 плюс фильма |
, | игнор |
длительностью | продолжительность фильма - ]1 .. [ ч |
более 1 часа и | игнор |
годам выхода не позднее 2000 года | год выхода фильма - не 2000 год |
. Результат | игнор |
отсортируйте по убыванию длительности | order by |
Пример №1.12
Пользователь> сколько платежей с суммой платежа больше 300
Система v0.46> Вывести записи "количество платежей", с условием, что "величина платежа" больше 300.
select count(p.payment_id) as "Количество платежей"
from PAYMENT p
where p.amount > 300
Фрагмент | Интерпретация |
---|---|
сколько платежей | count(платеж) |
с суммой платежа | величина платежа - ]300 .. [ |
больше 300 | игнор |
Комментарий: Здесь разпознаётся, что сумма - это не агрегатная функция, а поле с денежной величиной.
Пример №1.13
Пользователь> покажи фильмы жанра ужасы, который начинается с Дом
Система v0.46> Вывести уникальные значения "фильм", с условием, что "название фильма" начинается с 'ДОМ' и существуют "категории" с условием, что "категория фильма" равно 'Ужасы', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where upper(f.title) like 'ДОМ%'
and exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 11)
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
фильмы | фильм |
жанра | категория |
ужасы | идентификатор категории - равно Ужасы |
, | игнор |
который начинается с Дом | название фильма - like 'ДОМ%' |
Пример №1.14
Пользователь> Вывести наименования фильмов у которых есть дополнительные материалы
Система v0.46> Вывести поля "название фильма" и "дополнительные материалы фильма", с условием, что "дополнительные материалы фильма" не пустой и "дополнительные материалы фильма" не равно '', с сортировкой по возрастанию названия фильма.
select f.title as "Название фильма",
f.special_features as "Дополнительные материалы фильма"
from FILM f
where f.special_features is not null
and f.special_features != ''
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
наименования фильмов | название фильма |
у которых есть дополнительные материалы | дополнительные материалы фильма не пусто |
Пример №1.15
Пользователь> Фильмы без "Многоножка" в названии
Система v0.46> Вывести уникальные значения "фильм", с условием, что "название фильма" не содержит подстроку 'МНОГОНОЖКА', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where position('МНОГОНОЖКА' in upper(f.title)) = 0
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
без | игнор |
"Многоножка" в названии | название фильма - не содержит подстроку 'МНОГОНОЖКА' |
Пример №1.16
Пользователь> когда был оформлен самый первый прокат
Система v0.46> Вывести "минимум даты начала аренды", с условием, что существует "прокат".
select min(re.rental_date) as "Минимум даты начала аренды" from RENTAL re
Фрагмент | Интерпретация |
---|---|
когда | дата начала аренды |
был оформлен | игнор |
самый первый | having by: минимум |
прокат | min(дата начала аренды) |
Пользователь> когда был оформлен последний прокат
Система v0.46> Вывести "максимум даты начала аренды", с условием, что существует "прокат".
select max(re.rental_date) as "Максимум даты начала аренды" from RENTAL re
Фрагмент | Интерпретация |
---|---|
когда | дата начала аренды |
был оформлен | игнор |
последний | having by: максимум |
прокат | max(дата начала аренды) |
Пример №1.17
Пользователь> выведи все записи о прокатах у которых дата взятия в прокат совпадает с датой возврата
Система v0.46> Вывести уникальные значения "фильм", с условием, что "дата начала аренды" равно "дате окончания аренды" и существует "прокат" и "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.rental_date = re.return_date
order by 1
Фрагмент | Интерпретация |
---|---|
выведи все записи | игнор |
о прокатах | прокат |
у которых дата взятия в прокат совпадает с датой возврата | дата начала аренды равно дата окончания аренды |
Пример №1.18
Пользователь> В какие годы фильмы брали напрокат
Система v0.46> Вывести уникальные значения "год проката", с условием, что существует "прокат", с сортировкой по возрастанию года проката.
select distinct extract(year from re.rental_date) as "Год проката"
from RENTAL re
order by 1
Фрагмент | Интерпретация |
---|---|
В какие годы | group by extract(year from re.rental_date) |
фильмы брали напрокат | прокат |
Пример №1.19
Пользователь> платёж с суммой платежа больше нуля
Система v0.46> Вывести уникальные значения "платеж", с условием, что "величина платежа" больше 0, с сортировкой по возрастанию платежа.
select distinct p.amount as "Платеж"
from PAYMENT p
where p.amount > 0
order by 1
Фрагмент | Интерпретация |
---|---|
платёж | платеж |
с суммой платежа | величина платежа - ]0 .. [ |
больше нуля | игнор |
Пример №1.20
Пользователь> выведи информацию по фильму с названием На мосту
Система v0.46> Вывести поля "название фильма", "стоимость фильма", "стоимость залога фильма", "продолжительность фильма", "сюжет фильма", "возрастной рейтинг", "год выхода фильма", "дополнительные материалы фильма" и "срок возврата фильма", с условием, что "название фильма" равно 'На мосту', с сортировкой по возрастанию названия фильма.
select f.title as "Название фильма",
f.rental_rate as "Стоимость фильма",
f.replacement_cost as "Стоимость залога фильма",
f.length as "Продолжительность фильма",
f.description as "Сюжет фильма",
f.rating as "Возрастной рейтинг",
f.release_year as "Год выхода фильма",
f.special_features as "Дополнительные материалы фильма",
f.rental_duration as "Срок возврата фильма"
from FILM f
where f.title = 'На мосту'
order by 1
Фрагмент | Интерпретация |
---|---|
выведи информацию | игнор |
по фильму | фильм |
с названием | название фильма |
На мосту | название фильма - равно 'На мосту' |
Пример №1.21
Пользователь> покажи все фильмы сортируя по году
Система v0.46> Вывести поля "фильм" и "год выхода фильма", с сортировкой по возрастанию года выхода фильма.
select f.title as "Фильм",
f.release_year as "Год выхода фильма"
from FILM f
order by 2
Фрагмент | Интерпретация |
---|---|
покажи все | игнор |
фильмы | фильм |
сортируя по году | order by |
Пример №1.22
Пользователь> сотрудники с именем михаил
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что имя сотрудника (без учета регистра) равно 'МИХАИЛ', с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
where upper(s.first_name) = 'МИХАИЛ'
order by 1
Фрагмент | Интерпретация |
---|---|
сотрудники | сотрудник |
с именем михаил | имя сотрудника - равно 'МИХАИЛ' |
Пример №1.23
Пользователь> фамилии актёров по имени андрей
Система v0.46> Вывести уникальные значения "фамилия актера", с условием, что имя актера (без учета регистра и буквы Ё) равно 'АНДРЕЙ', с сортировкой по возрастанию фамилии актера.
select distinct a.last_name as "Фамилия актера"
from ACTOR a
where replace(upper(a.first_name), 'Ё', 'Е') = 'АНДРЕЙ'
order by 1
Фрагмент | Интерпретация |
---|---|
фамилии актёров | фамилия актера |
по имени андрей | имя актера - равно 'АНДРЕЙ' |
Пример №1.24
Пользователь> какие id у категорий фильмов
Система v0.46> Вывести уникальные значения "идентификатор категории", с сортировкой по возрастанию идентификатора категории.
select distinct ca.category_id as "Идентификатор категории"
from CATEGORY ca
order by 1
Фрагмент | Интерпретация |
---|---|
какие id | идентификатор категории |
у категорий фильмов | категория |
Пример №1.25
Пользователь> есть ли Ян Спиваков среди клиентов
Система v0.46> Вывести уникальные значения "клиент", с условием, что имя клиента (без учета регистра) равно 'ЯН' и фамилия клиента (без учета регистра) равно 'СПИВАКОВ', с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where upper(c.first_name) = 'ЯН'
and upper(c.last_name) = 'СПИВАКОВ'
order by 1
Фрагмент | Интерпретация |
---|---|
есть ли | игнор |
Ян | имя клиента равно 'ЯН' |
Спиваков | фамилия клиента равно 'СПИВАКОВ' |
среди клиентов | клиент |
Пример №1.26
Пользователь> какие есть рейтинги фильмов
Система v0.46> Вывести уникальные значения "возрастной рейтинг", с сортировкой по возрастанию возрастного рейтинга.
select distinct f.rating as "Возрастной рейтинг"
from FILM f
order by 1
Фрагмент | Интерпретация |
---|---|
какие есть рейтинги фильмов | возрастной рейтинг не пусто |
Пример №1.27
Пользователь> название и сюжет всех фильмов
Система v0.46> Вывести поля "название фильма" и "сюжет фильма", с сортировкой по возрастанию названия фильма.
select f.title as "Название фильма",
f.description as "Сюжет фильма"
from FILM f
order by 1
Фрагмент | Интерпретация |
---|---|
название | название фильма |
и | игнор |
сюжет всех фильмов | сюжет фильма |
Пример №1.28
Пользователь> Выручка от проката за три года
Система v0.46> Вывести "сумма платежей", с условием, что "дата платежа" от '2022-01-01 00:00:00' до '2025-12-31 23:59:59'.
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
where p.payment_date between '2022-01-01 00:00:00' and '2025-12-31 23:59:59'
Фрагмент | Интерпретация |
---|---|
Выручка от проката | сумма платежей |
за три года | дата платежа - с 3 года назад по текущий год (2022.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Пользователь> Выручка от проката за три последних года
Система v0.46> Вывести "сумма платежей", с условием, что "дата платежа" от '2022-01-01 00:00:00' до '2025-12-31 23:59:59'.
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
where p.payment_date between '2022-01-01 00:00:00' and '2025-12-31 23:59:59'
Фрагмент | Интерпретация |
---|---|
Выручка от проката | сумма платежей |
за три последних года | дата платежа - с 3 года назад по текущий год (2022.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2003-01-01 00:00:00' and '2006-12-31 23:59:59'
select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2003-01-01 00:00:00' and '2006-12-31 23:59:59' | select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2022-01-01 00:00:00' and '2025-12-31 23:59:59'
select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2022-01-01 00:00:00' and '2025-12-31 23:59:59' |

Пример №2.1
Пользователь> 13) Вывести имя, фамилию покупателя, и информацию об адресе, городе и стране
Система v0.46> Вывести поля "имя клиента", "фамилия клиента", "адрес", "город" и "страна", с сортировкой по возрастанию имени клиента.
select c.first_name as "Имя клиента",
c.last_name as "Фамилия клиента",
ad.address as "Адрес",
ci.city as "Город",
co.country as "Страна"
from CUSTOMER c
join ADDRESS ad on c.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
join COUNTRY co on ci.country_id = co.country_id
order by 1
Фрагмент | Интерпретация |
---|---|
13) Вывести | игнор |
имя | имя клиента |
, | игнор |
фамилию покупателя | фамилия клиента |
, и информацию | игнор |
об адресе | адрес |
, | игнор |
городе | город |
и | игнор |
стране | страна |
Пример №2.2
Пользователь> 11) Найдите имена и фамилии клиентов, которые оплачивали аренду фильма 30 апреля 2007 года, и размер оплаты был больше 10, а имя начинается с подстроки кос. Результат отсортируйте по фамилии затем по имени по убыванию.
Система v0.46> Вывести поля "имя клиента" и "фамилия клиента", с условием, что "имя клиента" начинается с 'КОС' и существуют "платежи" с условием, что "дата платежа" от '2007-04-30 00:00:00' до '2007-04-30 23:59:59' и "величина платежа" больше 10, с сортировкой по возрастанию фамилии клиента и по убыванию имени клиента.
select c.first_name as "Имя клиента",
c.last_name as "Фамилия клиента"
from CUSTOMER c
where upper(c.first_name) like 'КОС%'
and exists (select *
from PAYMENT p
where p.customer_id = c.customer_id
and p.payment_date between '2007-04-30 00:00:00' and '2007-04-30 23:59:59'
and p.amount > 10)
order by 2, 1 desc nulls last
Фрагмент | Интерпретация |
---|---|
11) Найдите | игнор |
имена | имя клиента |
и | игнор |
фамилии клиентов | фамилия клиента |
, | игнор |
которые оплачивали аренду фильма | платеж |
30 апреля 2007 года | дата платежа - 30 апреля 2007 года |
, и | игнор |
размер оплаты | величина платежа - ]10 .. [ |
был больше 10, а | игнор |
имя начинается с подстроки кос | имя клиента - like 'КОС%' |
. Результат | игнор |
отсортируйте по фамилии затем по имени по убыванию | order by |
. | игнор |
Пример №2.3
Пользователь> фильмы и фильмы категории
Система v0.46> Вывести уникальные значения "фильм" и "категория", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
ca.name as "Категория"
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы и фильмы | фильм |
категории | категория |
Пример №2.4
Пользователь> покажи все детские и музыкальные фильмы и их категории
Система v0.46> Вывести уникальные значения "фильм" и "категория", с условием, что "категория фильма" равно 'Детский' или 'Музыкальный', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
ca.name as "Категория"
from CATEGORY ca
join FILM_CATEGORY fc on fc.category_id = ca.category_id
join FILM f on fc.film_id = f.film_id
where ca.category_id in (3, 12)
order by 1
Фрагмент | Интерпретация |
---|---|
покажи все | игнор |
детские и музыкальные | идентификатор категории - равно Детский или Музыкальный |
фильмы | фильм |
и их | игнор |
категории | категория |
Пользователь> а теперь семейные зарубежные и игровые
Система v0.46> Вывести уникальные значения "фильм" и "категория", с условием, что "категория фильма" равно 'Семейный' или 'Зарубежный' или 'Игровое шоу', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
ca.name as "Категория"
from CATEGORY ca
join FILM_CATEGORY fc on fc.category_id = ca.category_id
join FILM f on fc.film_id = f.film_id
where ca.category_id in (8, 9, 10)
order by 1
Фрагмент | Интерпретация |
---|---|
а теперь | игнор |
семейные зарубежные и игровые | идентификатор категории - равно Семейный или Зарубежный или Игровое шоу |
Пример №2.5
Пользователь> 16) список клиентов, не вернувших прокатные фильмы, взятые в 2005 году
Система v0.46> Вывести уникальные значения "клиент", с условием, что существуют "прокаты" с условием, что "незавершенная аренда проката" и "взять проката" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59', с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id
and re.return_date is null
and re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59')
order by 1
Фрагмент | Интерпретация |
---|---|
16) список | игнор |
клиентов | клиент |
, | игнор |
не вернувших прокатные фильмы | незавершенная аренда проката |
, | игнор |
взятые в 2005 году | взять проката - 2005 год |
Пример №2.6
Пользователь> Покажи адреса магазинов в городе урюпинске и москве
Система v0.46> Вывести уникальные значения "адрес", с условием, что существуют "склады" с условием, что наименование города (без учета регистра и буквы Ё) равно или 'УРЮПИНСКЕ' или 'УРЮПИНСК' или 'МОСКВА', с сортировкой по возрастанию адреса.
select distinct ad.address as "Адрес"
from ADDRESS ad
where exists (select *
from STORE st
join CITY ci on ad.city_id = ci.city_id
where st.address_id = ad.address_id
and replace(upper(ci.city), 'Ё', 'Е') in ('УРЮПИНСКЕ', 'УРЮПИНСК', 'МОСКВА'))
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
адреса | адрес |
магазинов | склад |
в городе | город |
урюпинске и москве | наименование города равно 'УРЮПИНСКЕ' или 'Москва' |
Пользователь> покажи все магазины в России
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "адреса" с условием, что "название страны" равно 'Россия', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from ADDRESS ad
join CITY ci on ad.city_id = ci.city_id
join COUNTRY co on ci.country_id = co.country_id
where st.address_id = ad.address_id
and co.country = 'Россия')
order by 1
Фрагмент | Интерпретация |
---|---|
покажи все | игнор |
магазины | склад |
в России | название страны - равно 'Россия' |
Пример №2.7
Пользователь> На каком языке доступен фильм Заводной апельсин
Система v0.46> Вывести уникальные значения "язык озвучки", с условием, что существуют "фильмы" и "фильмы на складе" с условием, что "свободный фильма на складе" и название фильма (без учета регистра и буквы Ё) равно 'ЗАВОДНОЙ АПЕЛЬСИН', с сортировкой по возрастанию языка озвучки.
select distinct la.name as "Язык озвучки"
from LANGUAGE la
where exists (select *
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
where f.language_id = la.language_id
and not exists
(select *
from RENTAL ren
where ren.inventory_id = iv.inventory_id
and ren.return_date is null
)
and replace(upper(f.title), 'Ё', 'Е') = 'ЗАВОДНОЙ АПЕЛЬСИН')
order by 1
Фрагмент | Интерпретация |
---|---|
На каком языке | язык озвучки |
доступен | свободный фильма на складе |
фильм | фильм |
Заводной апельсин | название фильма равно 'ЗАВОДНОЙ АПЕЛЬСИН' |
Пример №2.8
Пользователь> Покажи фильмы у которых отсутствует дата возврата
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "прокаты" с условием, что "дата окончания аренды" пустой, с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.return_date is null)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
фильмы | фильм |
у которых отсутствует дата возврата | дата окончания аренды пусто |
Пользователь> Покажи фильмы без даты возврата
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "прокаты" с условием, что "дата окончания аренды" пустой, с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.return_date is null)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
фильмы | фильм |
без даты возврата | дата окончания аренды пусто |
Пример №2.9
Пользователь> покажи фильмы без русского перевода
Система v0.46> Вывести уникальные значения "фильм" и "название языка озвучки", с условием, что "язык озвучки" не равно 'русский', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
la.name as "Название языка озвучки"
from FILM f
join LANGUAGE la on f.language_id = la.language_id
where la.language_id != 1
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
фильмы | фильм |
без русского | идентификатор языка озвучки - не равно русский |
перевода | язык озвучки |
Пример №2.10
Пользователь> магазины в австралии, которые продали фильмы
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "адреса", "фильмы на складе" и "прокаты" с условием, что "название страны" равно 'Австралия', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from ADDRESS ad
join INVENTORY iv on iv.store_id = st.store_id
join CITY ci on ad.city_id = ci.city_id
join RENTAL re on re.inventory_id = iv.inventory_id
join COUNTRY co on ci.country_id = co.country_id
where st.address_id = ad.address_id
and co.country = 'Австралия')
order by 1
Фрагмент | Интерпретация |
---|---|
магазины | склад |
в австралии | название страны - равно 'Австралия' |
, | игнор |
которые продали фильмы | прокат |
Пример №2.11
Пользователь> покажи триллеры и комедии в аренде у клиентов
Система v0.46> Вывести уникальные значения "фильм" и "категория", с условием, что "категория фильма" равно 'Ужасы' или 'Комедия' и "незавершенная аренда проката" и существует "фильм на складе" и "прокат", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
ca.name as "Категория"
from CATEGORY ca
join FILM_CATEGORY fc on fc.category_id = ca.category_id
join FILM f on fc.film_id = f.film_id
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
where ca.category_id in (11, 5)
and re.return_date is null
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
триллеры и комедии | идентификатор категории - равно Ужасы или Комедия |
в аренде у клиентов | незавершенная аренда проката |
Пример №2.12
Пользователь> покажи количество фильмов c возрастным ограничением 16 в названии которых менее 19 символов и количеством дней на прокат более 10
Система v0.46> Вывести записи "количество фильмов", с условием, что "18 плюс фильма" и "длина названия фильма" меньше 19 и существуют "фильмы на складе" и "прокаты" с условием, что "количество дней проката" больше 10 и "аренда завершена проката".
select count(f.film_id) as "Количество фильмов"
from FILM f
where f.rating = 'NC-17'
and length(f.title) < 19
and exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and date_part('day', re.return_date - re.rental_date) > 10
and re.return_date is not null)
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
количество фильмов | count(фильм) |
c | игнор |
возрастным ограничением 16 | 18 плюс фильма |
в названии которых менее 19 символов | "длина названия фильма" меньше 19 |
и | игнор |
количеством дней на прокат | количество дней проката - ]10 .. [ |
более 10 | игнор |
Пример №2.13
Пользователь> вывести имена всех клиентов взявших фильмы вышедшие позднее 2001 года на немецком языке и стоимостью возмещения в случае утраты больше 100 рублей
Система v0.46> Вывести уникальные значения "имя клиента", с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "год выхода фильма" больше 2001 и "язык озвучки" равно 'немецкий' и "стоимость залога фильма" больше 100, с сортировкой по возрастанию имени клиента.
select distinct c.first_name as "Имя клиента"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join LANGUAGE la on f.language_id = la.language_id
where re.customer_id = c.customer_id
and f.release_year > 2001
and la.language_id = 6
and f.replacement_cost > 100)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
имена всех клиентов | имя клиента |
взявших фильмы | прокат |
вышедшие позднее 2001 года | год выхода фильма - 2001 год |
на немецком | идентификатор языка озвучки - равно немецкий |
языке | язык озвучки |
и | игнор |
стоимостью возмещения в случае утраты | стоимость залога фильма - ]100 .. [ |
больше 100 рублей | игнор |
Пример №2.14
Пользователь> покажи фильмы с участием актрисы Му Пук, снятые 2007 году
Система v0.46> Вывести уникальные значения "фильм", с условием, что "год выхода фильма" равно 2007 и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'МУ' и фамилия актера (без учета регистра) равно 'ПУК', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where f.release_year = 2007
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'МУ'
and upper(a.last_name) = 'ПУК')
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
фильмы | фильм |
с участием | игра актёра в фильме не пусто |
актрисы | актер |
Му | имя актера равно 'МУ' |
Пук | фамилия актера равно 'ПУК' |
, | игнор |
снятые 2007 году | год выхода фильма - 2007 год |
Пример №2.15
Пользователь> В каких фильмах снимался джонни депп
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ДЖОННИ' и фамилия актера (без учета регистра и буквы Ё) равно 'ДЕПП', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'ДЖОННИ'
and replace(upper(a.last_name), 'Ё', 'Е') = 'ДЕПП')
order by 1
Фрагмент | Интерпретация |
---|---|
В каких фильмах | фильм |
снимался | игра актёра в фильме |
джонни | имя актера равно 'ДЖОННИ' |
депп | фамилия актера равно 'ДЕПП' |
Пользователь> в каком фильме снимался петров андрей
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что фамилия актера (без учета регистра и буквы Ё) равно 'ПЕТРОВ' и имя актера (без учета регистра и буквы Ё) равно 'АНДРЕЙ', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and replace(upper(a.last_name), 'Ё', 'Е') = 'ПЕТРОВ'
and replace(upper(a.first_name), 'Ё', 'Е') = 'АНДРЕЙ')
order by 1
Фрагмент | Интерпретация |
---|---|
в каком фильме | фильм |
снимался | игра актёра в фильме |
петров | фамилия актера равно 'ПЕТРОВ' |
андрей | имя актера равно 'АНДРЕЙ' |
Пример №2.16
Пользователь> Покажи все фильмы, проданные Васей
Система v0.46> Вывести уникальные значения "фильм", с условием, что имя сотрудника (без учета регистра) равно 'ВАСЯ' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from RENTAL re
join STAFF s on re.staff_id = s.staff_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where upper(s.first_name) = 'ВАСЯ'
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи все | игнор |
фильмы | прокат |
, | игнор |
проданные | прокат |
Васей | имя сотрудника равно 'ВАСЕЙ' |
Пример №2.17
Пользователь> Вывести имя, фамилию покупателя, и информацию об адресе, которые взяли в прокат фильм категории комедия в 2006 году в Москве и произвели платеж в течение 14 дней
Система v0.46> Вывести поля "имя клиента", "фамилия клиента" и "адрес", с условием, что "категория фильма" равно 'Комедия' и "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и "наименование города" равно 'Москва' и "срок платежа" меньше или равно 14 и существует "прокат" и "фильм на складе", с сортировкой по возрастанию имени клиента.
select c.first_name as "Имя клиента",
c.last_name as "Фамилия клиента",
ad.address as "Адрес"
from CUSTOMER c
join ADDRESS ad on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
join PAYMENT p on p.rental_id = re.rental_id
join CITY ci on ad.city_id = ci.city_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5
and re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
and ci.city = 'Москва'
and date_part('day', p.payment_date - re.rental_date) <= 14
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
имя | имя клиента |
, | игнор |
фамилию покупателя | фамилия клиента |
, и информацию | игнор |
об адресе | адрес |
, | игнор |
которые взяли в прокат фильм | прокат |
категории | категория |
комедия | идентификатор категории - равно Комедия |
в 2006 году | дата начала аренды - 2006 год |
в Москве | наименование города - равно 'Москва' |
и произвели | игнор |
платеж | платеж |
в течение 14 дней | срок платежа ] .. 14] дн |
Пример №2.18
Пользователь> выданные фильмы
Система v0.46> Вывести уникальные значения "фильм", с условием, что существует "прокат" и "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
order by 1
Фрагмент | Интерпретация |
---|---|
выданные фильмы | прокат |
Пользователь> фильмы, выданные в прокат
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "прокаты", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id)
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, | игнор |
выданные в прокат | прокат |
Пример №2.19
Пользователь> сколько свободных фильмов есть сейчас
Система v0.46> Вывести записи "количество фильмов на складе", с условием, что "свободный фильма на складе" и существуют "фильмы" и существует "фильм на складе".
select count(iv.inventory_id) as "Количество фильмов на складе"
from INVENTORY iv
where not exists (select *
from RENTAL ren
where ren.inventory_id = iv.inventory_id
and ren.return_date is null)
and exists (select *
from FILM f
where iv.film_id = f.film_id)
Фрагмент | Интерпретация |
---|---|
сколько | игнор |
свободных | свободный фильма на складе |
фильмов | фильм |
есть сейчас | игнор |
Пример №2.20
Пользователь> что есть сейчас на складе из свободного для просмотра
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "склады" и не существуют "фильмы на складе" и "склады" с условием, что не "свободный фильма на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
where iv.film_id = f.film_id)
and not exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
where iv.film_id = f.film_id
and exists
(select *
from RENTAL ren
where ren.inventory_id = iv.inventory_id
and ren.return_date is null
))
order by 1
Фрагмент | Интерпретация |
---|---|
что | фильм |
есть сейчас | игнор |
на складе | склад |
из свободного для просмотра | свободный фильма на складе |
Пример №2.21
Пользователь> Покажи почту клиентов всех новых клиентов за последние три месяца
Система v0.46> Вывести поля "email клиента" и "дата прихода клиента", с условием, что "дата прихода клиента" от '2025-03-01 00:00:00' до '2025-06-30 23:59:59', с сортировкой по возрастанию email клиента.
select c.email as "Email клиента",
(select min(rre.rental_date)
from RENTAL rre
where rre.customer_id = c.customer_id) as "Дата прихода клиента"
from CUSTOMER c
where (select min(rre.rental_date)
from RENTAL rre
where rre.customer_id = c.customer_id) between '2025-03-01 00:00:00' and '2025-06-30 23:59:59'
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
почту клиентов | email клиента |
всех | игнор |
новых клиентов за последние три месяца | дата прихода клиента - с 3 месяца назад по текущий месяц (2025.03.01-2025.06.30 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select c.email as "Email клиента", (select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id) as "Дата прихода клиента" from CUSTOMER c where (select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id) between '2005-11-01 00:00:00' and '2006-02-28 23:59:59' order by 1 | select c.email as "Email клиента", (select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id) as "Дата прихода клиента" from CUSTOMER c where (select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id) between '2025-03-01 00:00:00' and '2025-06-30 23:59:59' order by 1 |
Пример №2.22
Пользователь> где представлен в прокате фильм хостел
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "фильмы на складе", "прокаты" и "фильмы" с условием, что "название фильма" равно 'Хостел', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where iv.store_id = st.store_id
and f.title = 'Хостел')
order by 1
Фрагмент | Интерпретация |
---|---|
где | склад |
представлен | игнор |
в прокате фильм | прокат |
хостел | название фильма - равно 'Хостел' |
Пример №2.23
Пользователь> Города, названия которых совпадают с названием стран
Система v0.46> Вывести уникальные значения "город", с условием, что существуют "страны" с условием, что "наименование города" равно "названию страны", с сортировкой по возрастанию города.
select distinct ci.city as "Город"
from CITY ci
where exists (select *
from COUNTRY co
where ci.country_id = co.country_id
and ci.city = co.country)
order by 1
Фрагмент | Интерпретация |
---|---|
Города | город |
, | игнор |
названия которых совпадают с названием стран | наименование города равно название страны |
Пример №2.24
Пользователь> Зарубежные актёры
Система v0.46> Вывести уникальные значения "актер", с условием, что "категория фильма" равно 'Зарубежный' и существует "игра актёра в фильме", с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from CATEGORY ca
join FILM_CATEGORY fc on fc.category_id = ca.category_id
join FILM f on fc.film_id = f.film_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where ca.category_id = 9
order by 1
Фрагмент | Интерпретация |
---|---|
Зарубежные | идентификатор категории - равно Зарубежный |
актёры | актер |
Пример №2.25
Пользователь> когда клиент 'Якуб Дёмин' брал фильм 'Клерки'
Система v0.46> Вывести уникальные значения "дата начала аренды", с условием, что существуют "клиенты", "фильмы на складе" и "фильмы" с условием, что имя клиента (без учета регистра) равно 'ЯКУБ' и фамилия клиента (без учета регистра и буквы Ё) равно 'ДЕМИН' и "название фильма" равно 'Клерки' и существует "прокат", с сортировкой по возрастанию даты начала аренды.
select distinct re.rental_date as "Дата начала аренды"
from RENTAL re
where exists (select *
from CUSTOMER c
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and upper(c.first_name) = 'ЯКУБ'
and replace(upper(c.last_name), 'Ё', 'Е') = 'ДЕМИН'
and f.title = 'Клерки')
order by 1
Фрагмент | Интерпретация |
---|---|
когда | дата начала аренды |
клиент | клиент |
'Якуб | имя клиента равно 'ЯКУБ' |
Дёмин' | фамилия клиента равно 'ДЕМИН' |
брал фильм | прокат |
'Клерки' | название фильма - равно 'Клерки' |
Пример №2.26
Пользователь> Какие сотрудники работают по адресу Четвертая (Венера тер. СНТ), дом 141
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что существуют "адреса" и "склады" с условием, что "адрес" равно 'Четвертая (Венера тер. СНТ), дом 141', с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
where exists (select *
from ADDRESS ad
join STORE st on s.store_id = st.store_id
where ad.address = 'Четвертая (Венера тер. СНТ), дом 141')
order by 1
Фрагмент | Интерпретация |
---|---|
Какие сотрудники | сотрудник |
работают по адресу | работать по адресу сотрудника |
Четвертая (Венера тер. СНТ), дом 141 | адрес - равно 'Четвертая (Венера тер. СНТ), дом 141' |
Пример №2.27
Пользователь> вывести место работы работника Александр Иванов
Система v0.46> Вывести уникальные значения "склад", с условием, что имя сотрудника (без учета регистра и буквы Ё) равно 'АЛЕКСАНДР' и фамилия сотрудника (без учета регистра) равно 'ИВАНОВ', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STAFF s
join STORE st on s.store_id = st.store_id
where replace(upper(s.first_name), 'Ё', 'Е') = 'АЛЕКСАНДР'
and upper(s.last_name) = 'ИВАНОВ'
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
место работы | сотрудник и склад - связь (s.store_id = st.store_id) |
работника | сотрудник |
Александр | имя сотрудника равно 'АЛЕКСАНДР' |
Иванов | фамилия сотрудника равно 'ИВАНОВ' |
Пример №2.28
Пользователь> вывести покупателей, бравших фильмы, где есть актёр, имя которого начинается с той же же буквы, что и имя покупателя
Система v0.46> Вывести уникальные значения "клиент", с условием, что существуют "прокаты", "фильмы на складе", "фильмы", "игры актёра в фильме" и "актеры" с условием, что 'имя актера' и 'имя клиента' начинаются одинаковой буквой, с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where re.customer_id = c.customer_id
and substr(a.first_name, 1, 1) = substr(c.first_name, 1, 1))
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
покупателей | клиент |
, | игнор |
бравших фильмы | прокат |
, где | игнор |
есть актёр | актер не пусто |
, | игнор |
имя которого начинается с той же же буквы, что и имя покупателя | 'имя актера' и 'имя клиента' начинаются одинаковой буквой |
Пример №2.29
Пользователь> все управляющие складами и склады
Система v0.46> Вывести уникальные значения "сотрудник" и "склад", с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник",
(select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
join STAFF s on st.manager_staff_id = s.staff_id
order by 1
Фрагмент | Интерпретация |
---|---|
все | игнор |
управляющие складами | склад и сотрудник - связь (st.manager_staff_id = s.staff_id) |
и | игнор |
склады | склад |
Пример №2.30
Пользователь> все управляющие складами и адрес склада
Система v0.46> Вывести уникальные значения "сотрудник" и "адрес", с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник",
ad.address as "Адрес"
from STORE st
join STAFF s on st.manager_staff_id = s.staff_id
join ADDRESS ad on st.address_id = ad.address_id
order by 1
Фрагмент | Интерпретация |
---|---|
все | игнор |
управляющие складами | склад и сотрудник - связь (st.manager_staff_id = s.staff_id) |
и | игнор |
адрес | адрес |
склада | склад |
Пример №2.31
Пользователь> все управляющие складами и адрес склада и город в котором склад находится
Система v0.46> Вывести уникальные значения "сотрудник", "адрес" и "город", с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник",
ad.address as "Адрес",
ci.city as "Город"
from STORE st
join STAFF s on st.manager_staff_id = s.staff_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
order by 1
Фрагмент | Интерпретация |
---|---|
все | игнор |
управляющие складами | склад и сотрудник - связь (st.manager_staff_id = s.staff_id) |
и | игнор |
адрес | адрес |
склада | склад |
и | игнор |
город | город |
в котором склад | склад |
находится | игнор |
Пример №2.32
Пользователь> Брал ли Ян Спиваков фильм Извращенная страсть в аренду
Система v0.46> Вывести уникальные значения "фильм", с условием, что имя клиента (без учета регистра) равно 'ЯН' и фамилия клиента (без учета регистра) равно 'СПИВАКОВ' и "название фильма" равно 'Извращенная страсть' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join FILM f on iv.film_id = f.film_id
where upper(c.first_name) = 'ЯН'
and upper(c.last_name) = 'СПИВАКОВ'
and f.title = 'Извращенная страсть'
order by 1
Фрагмент | Интерпретация |
---|---|
Брал | прокат |
ли | игнор |
Ян | имя клиента равно 'ЯН' |
Спиваков | фамилия клиента равно 'СПИВАКОВ' |
фильм Извращенная страсть | название фильма - равно 'Извращенная страсть' |
в аренду | прокат |
Пример №2.33
Пользователь> адреса всех складов
Система v0.46> Вывести уникальные значения "адрес" и "склад", с сортировкой по возрастанию адреса.
select distinct ad.address as "Адрес",
(select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from ADDRESS ad
join STORE st on st.address_id = ad.address_id
order by 1
Фрагмент | Интерпретация |
---|---|
адреса | адрес |
всех | игнор |
складов | склад |
Пример №2.34
Пользователь> на каком складе работает человек по имени ян
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "сотрудники" с условием, что "работать сотрудника" и имя сотрудника (без учета регистра) равно 'ЯН', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from STAFF s
where s.store_id = st.store_id
and upper(s.first_name) = 'ЯН')
order by 1
Фрагмент | Интерпретация |
---|---|
на каком складе | склад |
работает человек | сотрудник |
по имени ян | имя сотрудника - равно 'ЯН' |
Пример №2.35
Пользователь> города в которых есть склады, и покажи адреса складов
Система v0.46> Вывести уникальные значения "город" и "адрес", с сортировкой по возрастанию города.
select distinct ci.city as "Город",
ad.address as "Адрес"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join STORE st on st.address_id = ad.address_id
order by 1
Фрагмент | Интерпретация |
---|---|
города | город |
в которых есть склады | склад не пусто |
, и покажи | игнор |
адреса | вывести адрес |
складов | вывести склад |
Пример №2.36
Пользователь> вывести всех покупателей, у которых вчера фильмы были в аренде
Система v0.46> Вывести поля "клиент" и "дней в аренде", с условием, что существуют "прокаты" с условием, что "дата начала аренды" меньше или равно '2025-06-19 00:00:00' и дата окончания аренды больше или равно '2025-06-19 23:59:59' и "в аренде", с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
(select date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date)
from RENTAL re
where re.customer_id = c.customer_id
and re.rental_date <= '2025-06-19 00:00:00'
and coalesce(re.return_date, current_timestamp) >= '2025-06-19 23:59:59'
and re.return_date is null
limit 1) as "Дней в аренде"
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id
and re.rental_date <= '2025-06-19 00:00:00'
and coalesce(re.return_date, current_timestamp) >= '2025-06-19 23:59:59'
and re.return_date is null)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести всех | игнор |
покупателей | клиент |
, | игнор |
у которых вчера | 1 день назад (2025.06.19 отн. 2025.06.20 14:16) между дата начала аренды и дата окончания аренды |
фильмы | прокат |
были в аренде | дней в аренде |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select concat(c.first_name, ' ', c.last_name) as "Клиент", (select date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) from RENTAL re where re.customer_id = c.customer_id and re.rental_date <= '2006-02-03 00:00:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-03 23:59:59' and re.return_date is null limit 1) as "Дней в аренде" from CUSTOMER c where exists (select * from RENTAL re where re.customer_id = c.customer_id and re.rental_date <= '2006-02-03 00:00:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-03 23:59:59' and re.return_date is null) order by 1 | select concat(c.first_name, ' ', c.last_name) as "Клиент", (select date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) from RENTAL re where re.customer_id = c.customer_id and re.rental_date <= '2025-06-19 00:00:00' and coalesce(re.return_date, current_timestamp) >= '2025-06-19 23:59:59' and re.return_date is null limit 1) as "Дней в аренде" from CUSTOMER c where exists (select * from RENTAL re where re.customer_id = c.customer_id and re.rental_date <= '2025-06-19 00:00:00' and coalesce(re.return_date, current_timestamp) >= '2025-06-19 23:59:59' and re.return_date is null) order by 1 |
Пример №2.37
Пользователь> на сколько дней клиент Сидоров просрочил аренду фильма Воин
Система v0.46> Вывести уникальные значения "число дней задержки возврата фильма", с условием, что "название фильма" равно 'Воин' и фамилия клиента (без учета регистра) равно 'СИДОРОВ' и "возврат фильма с задержкой" и существует "прокат" и "фильм на складе", с сортировкой по возрастанию числа дней задержки возврата фильма.
select distinct date_part('day', re.return_date - re.rental_date) - f.rental_duration as "Число дней задержки возврата фильма"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join FILM f on iv.film_id = f.film_id
where f.title = 'Воин'
and upper(c.last_name) = 'СИДОРОВ'
and (re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration)
order by 1
Фрагмент | Интерпретация |
---|---|
на сколько дней | игнор |
клиент | клиент |
Сидоров | фамилия клиента равно 'СИДОРОВ' |
просрочил аренду фильма | число дней задержки возврата фильма |
Воин | название фильма - равно 'Воин' |
Пример №2.38
Пользователь> сколько фильмов находятся в аренде более месяца
Система v0.46> Вывести записи "количество прокатов", с условием, что "дней в аренде" больше 30 и "в аренде" и существует "прокат".
select count(re.rental_id) as "Количество прокатов"
from RENTAL re
where date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > 30
and re.return_date is null
Фрагмент | Интерпретация |
---|---|
сколько фильмов | count(прокат) |
находятся в аренде | дней в аренде - ]1 .. [ мес |
более месяца | игнор |

Пример №3.1
Пользователь> 14) Выведите количество фильмов для каждого языка озвучки
Система v0.46> Вывести поля "язык озвучки" и "количество фильмов", с группировкой по "языку озвучки", с сортировкой по убыванию количества фильмов и по возрастанию языка озвучки.
select la.name as "Язык озвучки",
count(distinct f.film_id) as "Количество фильмов"
from LANGUAGE la
left join FILM f on f.language_id = la.language_id
group by la.language_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
14) Выведите | игнор |
количество фильмов | count(фильм) |
для каждого | для каждого |
языка озвучки | язык озвучки |
Пользователь> отсортируй по языку в обратном порядке
Система v0.46> Вывести поля "язык озвучки" и "количество фильмов", с группировкой по ""идентификатору языка озвучки"", с сортировкой по убыванию языка озвучки.
select la.name as "Язык озвучки",
count(distinct f.film_id) as "Количество фильмов"
from LANGUAGE la
left join FILM f on f.language_id = la.language_id
group by la.language_id
order by 1 desc nulls last
Фрагмент | Интерпретация |
---|---|
отсортируй | игнор |
по языку | order by 1 desc |
в обратном порядке | desc |
Пример №3.2
Пользователь> 36) Вывести итоги сдачи в аренду за 2005 год посуточно, помесячно и итог за год
Система v0.46> Вывести поля "год платежа", "месяц с годом платежа", "дата платежа" и "сумма платежей", с группировкой по "году платежа", "месяцу с годом платежа" и "дате платежа", с условием, что "дата платежа" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59', с сортировкой по возрастанию года платежа, по возрастанию месяца с годом платежа и по возрастанию даты платежа.
select extract(year from p.payment_date) as "Год платежа",
date_trunc('month', p.payment_date) as "Месяц с годом платежа",
date(p.payment_date) as "Дата платежа",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
where p.payment_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by 1, 2, 3
order by 1, 2, 3
Фрагмент | Интерпретация |
---|---|
36) Вывести | игнор |
итоги сдачи в аренду | сумма платежей |
за 2005 год | дата платежа - 2005 год |
посуточно, помесячно и итог за год | дата платежа - group by |
Пример №3.3
Пользователь> 37) Вывести итоги сдачи в аренду за всё время посуточно, помесячно и по годам
Система v0.46> Вывести поля "год платежа", "месяц с годом платежа", "дата платежа" и "сумма платежей", с группировкой по "году платежа", "месяцу с годом платежа" и "дате платежа", с сортировкой по возрастанию года платежа, по возрастанию месяца с годом платежа и по возрастанию даты платежа.
select extract(year from p.payment_date) as "Год платежа",
date_trunc('month', p.payment_date) as "Месяц с годом платежа",
date(p.payment_date) as "Дата платежа",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
group by 1, 2, 3
order by 1, 2, 3
Фрагмент | Интерпретация |
---|---|
37) Вывести | игнор |
итоги сдачи в аренду | сумма платежей |
за всё время | игнор |
посуточно, помесячно и по годам | дата платежа - group by |
Пример №3.4
Пользователь> выведи страны, количество городов и сумму клиентов в них, сортировать по убыванию числа клиентов
Система v0.46> Ошибка: местоимения лучше не употреблять (них) (в них), запрос сформирован, скорее всего, неправильно. Вывести поля "страна", "количество городов" и "количество клиентов", с группировкой по "стране", с сортировкой по убыванию количества клиентов и по убыванию количества городов.
select co.country as "Страна",
count(distinct ci.city_id) as "Количество городов",
count(distinct c.customer_id) as "Количество клиентов"
from COUNTRY co
left join CITY ci on ci.country_id = co.country_id
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
group by co.country_id
order by 3 desc nulls last, 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
страны | страна |
, | игнор |
количество городов | count(город) |
и | игнор |
сумму клиентов | sum(клиент) |
в них | местоимения лучше не употреблять (них) |
, | игнор |
сортировать по убыванию числа клиентов | order by |
Пример №3.5
Пользователь> 38) Вывести распределение количества имеющихся фильмов в фильмотеке в разрезах категории, возрастного рейтинга и всех их возможных комбинаций.
Система v0.46> Вывести поля "категория", "возрастной рейтинг" и "количество фильмов", с группировкой по "категории" и "возрастному рейтингу", с сортировкой по возрастанию категории и по возрастанию возрастного рейтинга. Мне непонятен фрагмент "имеющихся", но это, скорее всего, несущественно. Уверенность в результате - 90%.
select ca.name as "Категория",
f.rating as "Возрастной рейтинг",
count(distinct f.film_id) as "Количество фильмов"
from FILM f
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id, 2
order by 1, 2
Фрагмент | Интерпретация |
---|---|
38) Вывести распределение | игнор |
количества имеющихся фильмов | count(фильм) |
в фильмотеке | игнор |
в разрезах категории, возрастного рейтинга | group by категория , возрастной рейтинг |
и всех их возможных комбинаций. | игнор |
Пример №3.6
Пользователь> Найди самый дешевый фильм среди детских
Система v0.46> Вывести уникальные значения "фильм" и "стоимость фильма", с условием, что "категория фильма" равно 'Детский' и "стоимость фильма" равно минимальному значению, с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
f.rental_rate as "Стоимость фильма"
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 3
and f.rental_rate = (select min(f.rental_rate)
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 3)
order by 1
Фрагмент | Интерпретация |
---|---|
Найди | игнор |
самый дешевый | стоимость фильма = Min |
фильм | игнор |
среди детских | идентификатор категории - равно Детский |
Пример №3.7
Пользователь> названия фильмов с сортировкой по убыванию рейтинга популярности
Система v0.46> Вывести поля "название фильма" и "количество прокатов", с группировкой по "названию фильма", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию количества прокатов.
select f.title as "Название фильма",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by 1
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
названия фильмов | название фильма |
с сортировкой по убыванию рейтинга популярности | order by |
Пример №3.8
Пользователь> Сколько арендовали каждый из фильмов по годам
Система v0.46> Вывести поля "фильм", "год проката" и "количество прокатов", с группировкой по "фильму" и "году проката", с условием, что существует "фильм на складе" и "прокат", с сортировкой по возрастанию фильма и по возрастанию года проката.
select f.title as "Фильм",
extract(year from re.rental_date) as "Год проката",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id, 2
order by 1, 2
Фрагмент | Интерпретация |
---|---|
Сколько арендовали | count(прокат) |
каждый | для каждого |
из фильмов | фильм |
по годам | дата начала аренды - group by |
Пример №3.9
Пользователь> Сколько существует переводов для каждого фильма
Система v0.46> Вывести поля "фильм" и "количество языков озвучки", с группировкой по "фильму", с сортировкой по убыванию количества языков озвучки и по возрастанию фильма.
select f.title as "Фильм",
count(distinct la.language_id) as "Количество языков озвучки"
from FILM f
join LANGUAGE la on f.language_id = la.language_id
group by f.film_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Сколько существует переводов | count(язык озвучки) |
для каждого | для каждого |
фильма | фильм |
Пример №3.10
Пользователь> названия фильмов и рейтинг популярности сортировать по убыванию рейтинга
Система v0.46> Вывести поля "название фильма" и "популярность проката", с группировкой по "названию фильма", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию популярности проката.
select f.title as "Название фильма",
count(distinct re.rental_id) as "Популярность проката"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by 1
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
названия фильмов | название фильма |
и | игнор |
рейтинг популярности | популярность проката |
сортировать по убыванию рейтинга | order by |
Пример №3.11
Пользователь> Вывести рейтинг покупателей по количеству не возвращенных прокатных фильмов в 2004 году. Результат отсортируйте по возрастанию.
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что не "вернуть фильм проката" и "дата начала аренды" от '2004-01-01 00:00:00' до '2004-12-31 23:59:59' и существует "прокат", с сортировкой по возрастанию количества прокатов.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
where re.return_date is null
and re.rental_date between '2004-01-01 00:00:00' and '2004-12-31 23:59:59'
group by c.customer_id
order by 2
Фрагмент | Интерпретация |
---|---|
Вывести рейтинг покупателей по количеству | игнор |
не возвращенных | вернуть фильм проката |
прокатных фильмов | игнор |
в 2004 году | дата начала аренды - 2004 год |
. Результат | игнор |
отсортируйте по возрастанию | order by |
. | игнор |
Пример №3.12
Пользователь> Среднее количество дней аренды фильма за предыдущий месяц
Система v0.46> Вывести "среднее количество дней проката", с условием, что "дата начала аренды" от '2025-05-01 00:00:00' до '2025-05-31 23:59:59' и "аренда завершена проката" и существуют "фильмы на складе" и "фильмы" и существует "прокат".
select avg(date_part('day', re.return_date - re.rental_date)) as "Среднее количество дней проката"
from RENTAL re
where re.rental_date between '2025-05-01 00:00:00' and '2025-05-31 23:59:59'
and re.return_date is not null
and exists (select *
from INVENTORY iv
join FILM f on iv.film_id = f.film_id
where re.inventory_id = iv.inventory_id)
Фрагмент | Интерпретация |
---|---|
Среднее количество дней аренды | avg(количество дней проката) |
фильма | фильм |
за предыдущий месяц | дата начала аренды - 1 месяц назад (2025.05.01-2025.05.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select avg(date_part('day', re.return_date - re.rental_date)) as "Среднее количество дней проката" from RENTAL re where re.rental_date between '2006-01-01 00:00:00' and '2006-01-31 23:59:59' and re.return_date is not null and exists (select * from INVENTORY iv join FILM f on iv.film_id = f.film_id where re.inventory_id = iv.inventory_id) | select avg(date_part('day', re.return_date - re.rental_date)) as "Среднее количество дней проката" from RENTAL re where re.rental_date between '2025-05-01 00:00:00' and '2025-05-31 23:59:59' and re.return_date is not null and exists (select * from INVENTORY iv join FILM f on iv.film_id = f.film_id where re.inventory_id = iv.inventory_id) |
Пример №3.13
Пользователь> покажи сумму оплаты по каждому фильму
Система v0.46> Вывести поля "фильм" и "сумма величин платежа", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию суммы величин платежа и по возрастанию фильма.
select f.title as "Фильм",
sum(p.amount) as "Сумма величин платежа"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join PAYMENT p on p.rental_id = re.rental_id
group by f.film_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
сумму оплаты | sum(величина платежа) |
по каждому | для каждого |
фильму | фильм |
Пример №3.14
Пользователь> сколько фильмов жанра 'комедия' или 'документальный' не вернули вовремя в 2006 году
Система v0.46> Вывести записи "количество фильмов", с условием, что существуют "фильмы на складе" и "прокаты" с условием, что "категория фильма" равно 'Комедия' или 'Документальный' и "задержка возвращения проката" и "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59'.
select count(f.film_id) as "Количество фильмов"
from FILM f
where exists (select *
from FILM_CATEGORY fc
join INVENTORY iv on iv.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
join RENTAL re on re.inventory_id = iv.inventory_id
where fc.film_id = f.film_id
and ca.category_id in (5, 6)
and date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
and re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59')
Фрагмент | Интерпретация |
---|---|
сколько фильмов | count(фильм) |
жанра | категория |
'комедия' или 'документальный' | идентификатор категории - равно Комедия или Документальный |
не вернули вовремя | задержка возвращения проката |
в 2006 году | дата начала аренды - 2006 год |
Пример №3.15
Пользователь> покажи количество покупателей в каждом магазине
Система v0.46> Вывести поля "склад" и "количество клиентов", с группировкой по "складу", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию количества клиентов и по возрастанию склада.
select (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
count(distinct c.customer_id) as "Количество клиентов"
from STORE st
left join INVENTORY iv on iv.store_id = st.store_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join CUSTOMER c on re.customer_id = c.customer_id
group by st.store_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
количество покупателей | count(клиент) |
в каждом | для каждого |
магазине | склад |
Пример №3.16
Пользователь> средняя стоимость проката в 2006 году по месяцам
Система v0.46> Вывести поля "месяц с годом проката" и "средняя стоимость проката", с группировкой по "месяцу с годом проката", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и существует "прокат", с сортировкой по возрастанию месяца с годом проката.
select date_trunc('month', re.rental_date) as "Месяц с годом проката",
avg((select ffi.rental_rate
from FILM ffi
join INVENTORY iinv on iinv.film_id = ffi.film_id
where iinv.inventory_id = re.inventory_id)) as "Средняя стоимость проката"
from RENTAL re
where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
group by 1
order by 1
Фрагмент | Интерпретация |
---|---|
средняя стоимость проката | avg(стоимость проката) |
в 2006 году | дата начала аренды - 2006 год |
по месяцам | дата начала аренды - group by |
Пример №3.17
Пользователь> сколько раз снимался в фильме каждый актер
Система v0.46> Вывести поля "актер" и "количество игр актёра в фильме", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с сортировкой по убыванию количества игр актёра в фильме и по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct f.film_id) as "Количество игр актёра в фильме"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
сколько раз снимался | count(игра актёра в фильме) |
в фильме | фильм |
каждый | для каждого |
актер | актер |
Пользователь> сколько раз каждый актер снимался в фильме
Система v0.46> Вывести поля "актер" и "количество игр актёра в фильме", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с сортировкой по убыванию количества игр актёра в фильме и по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct f.film_id) as "Количество игр актёра в фильме"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
сколько раз каждый актер снимался | count(игра актёра в фильме) |
в фильме | фильм |
Пример №3.18
Пользователь> популярные фильмы
Система v0.46> Вывести поля "фильм" и "популярность проката", с группировкой по "фильму", с условием, что существует "прокат" и "фильм на складе", с сортировкой по убыванию популярности проката.
select f.title as "Фильм",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
популярные | популярность проката = Max |
фильмы | игнор |
Пример №3.19
Пользователь> средняя оплата по жанрам
Система v0.46> Вывести поля "категория" и "средняя величина платежа", с группировкой по "категории", с условием, что существует "фильм на складе" и "прокат", с сортировкой по возрастанию категории.
select ca.name as "Категория",
avg(p.amount) as "Средняя величина платежа"
from CATEGORY ca
left join FILM_CATEGORY fc on fc.category_id = ca.category_id
left join FILM f on fc.film_id = f.film_id
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join PAYMENT p on p.rental_id = re.rental_id
group by ca.category_id
order by 1
Фрагмент | Интерпретация |
---|---|
средняя | avg(величина платежа) |
оплата | для каждого |
по жанрам | категория |
Пример №3.20
Пользователь> средняя стоимость проката в 2006 году по месяцам
Система v0.46> Вывести поля "месяц с годом проката" и "средняя стоимость проката", с группировкой по "месяцу с годом проката", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и существует "прокат", с сортировкой по возрастанию месяца с годом проката.
select date_trunc('month', re.rental_date) as "Месяц с годом проката",
avg((select ffi.rental_rate
from FILM ffi
join INVENTORY iinv on iinv.film_id = ffi.film_id
where iinv.inventory_id = re.inventory_id)) as "Средняя стоимость проката"
from RENTAL re
where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
group by 1
order by 1
Фрагмент | Интерпретация |
---|---|
средняя стоимость проката | avg(стоимость проката) |
в 2006 году | дата начала аренды - 2006 год |
по месяцам | дата начала аренды - group by |
Пример №3.21
Пользователь> Количество клиентов по городам за арендующие фильмы последние 30 лет
Система v0.46> Вывести поля "город" и "количество клиентов", с группировкой по "городу", с условием, что "дата начала аренды" от '1995-01-01 00:00:00' до '2025-12-31 23:59:59' и существует "прокат", с сортировкой по убыванию количества клиентов и по возрастанию города.
select ci.city as "Город",
count(distinct c.customer_id) as "Количество клиентов"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '1995-01-01 00:00:00' and '2025-12-31 23:59:59'
group by ci.city_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Количество | count(клиент) |
клиентов | для каждого |
по городам | город |
за арендующие фильмы | прокат |
последние 30 лет | дата начала аренды - с 30 лет назад по текущий год (1995.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select ci.city as "Город", count(distinct c.customer_id) as "Количество клиентов" from CITY ci left join ADDRESS ad on ad.city_id = ci.city_id left join CUSTOMER c on c.address_id = ad.address_id left join RENTAL re on re.customer_id = c.customer_id where re.rental_date between '1976-01-01 00:00:00' and '2006-12-31 23:59:59' group by ci.city_id order by 2 desc nulls last, 1 | select ci.city as "Город", count(distinct c.customer_id) as "Количество клиентов" from CITY ci left join ADDRESS ad on ad.city_id = ci.city_id left join CUSTOMER c on c.address_id = ad.address_id left join RENTAL re on re.customer_id = c.customer_id where re.rental_date between '1995-01-01 00:00:00' and '2025-12-31 23:59:59' group by ci.city_id order by 2 desc nulls last, 1 |
Пример №3.22
Пользователь> сколько клиентов приходится на каждого сотрудника?
Система v0.46> Вывести поля "сотрудник" и "количество клиентов", с группировкой по "сотруднику", с условием, что существует "прокат", с сортировкой по убыванию количества клиентов и по возрастанию сотрудника.
select concat(s.first_name, ' ', s.last_name) as "Сотрудник",
count(distinct c.customer_id) as "Количество клиентов"
from STAFF s
left join RENTAL re on re.staff_id = s.staff_id
left join CUSTOMER c on re.customer_id = c.customer_id
group by s.staff_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
сколько клиентов | count(клиент) |
приходится | игнор |
на каждого | для каждого |
сотрудника | сотрудник |
? | игнор |
Пример №3.23
Пользователь> сколько возвращают фильмов в день
Система v0.46> Вывести поля "дата проката" и "количество прокатов", с группировкой по "дате проката", с условием, что "вернуть фильм проката" и существует "прокат", с сортировкой по возрастанию даты проката.
select date(re.return_date) as "Дата проката",
count(re.rental_id) as "Количество прокатов"
from RENTAL re
where re.return_date is not null
group by 1
order by 1
Фрагмент | Интерпретация |
---|---|
сколько | игнор |
возвращают фильмов | вернуть фильм проката |
в день | дата возврата - group by |
Пример №3.24
Пользователь> суммы платежей по каждой дате
Система v0.46> Вывести поля "дата платежа" и "сумма платежей", с группировкой по "дате платежа", с сортировкой по возрастанию даты платежа.
select date(p.payment_date) as "Дата платежа",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
group by 1
order by 1
Фрагмент | Интерпретация |
---|---|
суммы платежей | сумма платежей |
по каждой | игнор |
дате | group by date(p.payment_date) |
Пример №3.25
Пользователь> сумма платежей по клиентам
Система v0.46> Вывести поля "клиент" и "сумма платежей", с группировкой по "клиенту", с сортировкой по убыванию суммы платежей и по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join PAYMENT p on p.customer_id = c.customer_id
group by c.customer_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
сумма платежей | для каждого |
по клиентам | клиент |
Пример №3.26
Пользователь> самые популярные жанры в прокате
Система v0.46> Вывести поля "категория" и "популярность проката", с группировкой по "категории", с условием, что существует "прокат" и "фильм на складе", с сортировкой по убыванию популярности проката.
select ca.name as "Категория",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
самые популярные | count(re.rental_id) having: равно максимуму |
жанры | категория |
в прокате | прокат |
Пользователь> самый популярный жанр в прокате
Система v0.46> Вывести поля "категория" и "популярность проката", с группировкой по "категории", с условием, что существует "прокат" и "фильм на складе", с группировочным условием, что популярность проката равно максимальному значению, с сортировкой по возрастанию категории.
select ca.name as "Категория",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select ca.name as "Категория",
count(distinct re.rental_id) as tmpval
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
самый популярный | count(re.rental_id) having: равно максимуму |
жанр | категория |
в прокате | прокат |
Пример №3.27
Пользователь> клиенты из астрахани которые просрочили аренду и количество задержек
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что "наименование города" равно 'Астрахань' и ??? не пустой и ??? больше и "возврат фильма с задержкой" и существует "прокат" и "фильм на складе", с сортировкой по убыванию количества прокатов.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
join ADDRESS ad on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
left join CITY ci on ad.city_id = ci.city_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where ci.city = 'Астрахань'
and re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > f.rental_duration
and (re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration)
group by c.customer_id
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
клиенты | клиент |
из астрахани | наименование города - равно 'Астрахань' |
которые просрочили аренду | число дней задержки возврата фильма |
и количество | игнор |
задержек | возвращать не вовремя проката |
Пользователь> клиенты из астрахани которые просрочили аренду и сколько каждый клиент не вернул фильм вовремя
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что "наименование города" равно 'Астрахань' и ??? не пустой и ??? больше и "возврат фильма с задержкой" и существует "прокат" и "фильм на складе", с сортировкой по убыванию количества прокатов и по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
join ADDRESS ad on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
left join CITY ci on ad.city_id = ci.city_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where ci.city = 'Астрахань'
and re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > f.rental_duration
and (re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration)
group by c.customer_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
клиенты | клиент |
из астрахани | наименование города - равно 'Астрахань' |
которые просрочили аренду | число дней задержки возврата фильма |
и сколько | игнор |
каждый | для каждого |
клиент | клиент |
не вернул фильм вовремя | возвращать не вовремя проката |
Пример №3.28
Пользователь>
популярность аренды фильма "корова" по регионам
популярность аренды фильма "корова" по регионам
Система v0.46> Вывести поля "район адреса" и "популярность проката", с группировкой по "району адреса", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по убыванию популярности проката и по возрастанию района адреса.
select ad.district as "Район адреса",
count(distinct re.rental_id) as "Популярность проката"
from ADDRESS ad
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where f.title = 'Корова'
group by 1
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
популярность аренды фильма | популярность проката |
"корова" | название фильма - равно 'Корова' |
по регионам | для каждого район адреса |
Пример №3.29
Пользователь> в каких городах сколько денег приносит аренда
Система v0.46> Вывести поля "город" и "сумма платежей", с группировкой по "городу", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию суммы платежей и по возрастанию города.
select ci.city as "Город",
sum(p.amount) as "Сумма платежей"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join PAYMENT p on p.rental_id = re.rental_id
group by ci.city_id
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
в каких городах | группировка по город |
сколько денег | сумма платежей |
приносит | игнор |
аренда | прокат |
Пример №3.30
Пользователь> среднее количество районов в городах
Система v0.46> Вывести "среднее количество разных районов адреса", с условием, что "адреса", с группировкой по "городу".
select avg(atab.tmpval) as "Среднее количество разных районов адреса" from (
select ci.city as "Город",
count(distinct ad.district) as tmpval
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
group by ci.city_id
order by 2 desc nulls last, 1
) atab
Фрагмент | Интерпретация |
---|---|
среднее | Avg |
количество | count(район адреса) |
районов | для каждого |
в городах | город |
Пример №3.31
Пользователь> Всего не вернули фильмов
Система v0.46> Вывести записи "количество прокатов", с условием, что "незавершенная аренда проката" и существует "прокат".
select count(re.rental_id) as "Количество прокатов"
from RENTAL re
where re.return_date is null
Фрагмент | Интерпретация |
---|---|
Всего | игнор |
не вернули фильмов | незавершенная аренда проката |
Пример №3.32
Пользователь> Средняя выручка от проката по месяцам
Система v0.46> Вывести "средняя сумма платежей", с условием, что "платежи", с группировкой по "месяцу с годом платежа".
select avg(atab.tmpval) as "Средняя сумма платежей" from (
select date_trunc('month', p.payment_date) as "Месяц с годом платежа",
sum(p.amount) as tmpval
from PAYMENT p
group by 1
order by 1
) atab
Фрагмент | Интерпретация |
---|---|
Средняя выручка от проката | avg(сумма платежей) |
по месяцам | дата платежа - group by |
4. Условие на группировку (having)

Пример №4.1.1
Пользователь> в каком городе брали ужастики чаще всего
Система v0.46> Вывести поля "город" и "количество прокатов", с группировкой по "городу", с условием, что "категория фильма" равно 'Ужасы' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию города.
select ci.city as "Город",
count(distinct re.rental_id) as "Количество прокатов"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 11
group by ci.city_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select ci.city as "Город",
count(distinct re.rental_id) as tmpval
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 11
group by ci.city_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в каком городе | город |
брали | count(прокат) |
ужастики | идентификатор категории - равно Ужасы |
чаще всего | having by: максимум |
Пример №4.1.2
Пользователь> в каких регионах кроме Татарстана или Подмосковья корова берется в аренду чаще всего
Система v0.46> Вывести поля "район адреса" и "количество прокатов", с группировкой по "району адреса", с условием, что "район адреса" не равно и 'Татарстан Респ' и 'Московская обл' и "название фильма" равно 'Корова' и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию района адреса.
select ad.district as "Район адреса",
count(distinct re.rental_id) as "Количество прокатов"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where ad.district not in ('Татарстан Респ', 'Московская обл')
and f.title = 'Корова'
group by 1
having count(distinct re.rental_id) = (select max(tmpval) from (
select ad.district as "Район адреса",
count(distinct re.rental_id) as tmpval
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where ad.district not in ('Татарстан Респ', 'Московская обл')
and f.title = 'Корова'
group by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в каких регионах | район адреса |
кроме | кроме |
Татарстана или Подмосковья | район адреса - не равно 'Татарстан Респ' или 'Московская обл' |
корова | название фильма - равно 'Корова' |
берется | прокат |
в аренду | count(прокат) |
чаще всего | having by: максимум |
Пример №4.1.3
Пользователь> кто просрочил больше всего фильмов кроме клиентов Егор Макаров и Святослав Греков
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что "задержка возвращения проката" и имя клиента (без учета регистра и буквы Ё) не равно 'ЕГОР' или фамилия клиента (без учета регистра) не равно 'МАКАРОВ' и имя клиента (без учета регистра) не равно 'СВЯТОСЛАВ' или фамилия клиента (без учета регистра и буквы Ё) не равно 'ГРЕКОВ' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
and (replace(upper(c.first_name), 'Ё', 'Е') != 'ЕГОР' or upper(c.last_name) != 'МАКАРОВ')
and (upper(c.first_name) != 'СВЯТОСЛАВ' or replace(upper(c.last_name), 'Ё', 'Е') != 'ГРЕКОВ')
group by c.customer_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as tmpval
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
and (replace(upper(c.first_name), 'Ё', 'Е') != 'ЕГОР' or upper(c.last_name) != 'МАКАРОВ')
and (upper(c.first_name) != 'СВЯТОСЛАВ' or replace(upper(c.last_name), 'Ё', 'Е') != 'ГРЕКОВ')
group by c.customer_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
кто | клиент |
просрочил | задержка возвращения проката |
больше всего | having by: максимум |
фильмов | count(прокат) |
кроме | не |
клиентов | игнор |
Егор | имя клиента не равно 'ЕГОР' |
Макаров | фамилия клиента не равно 'МАКАРОВ' |
и | игнор |
Святослав | имя клиента не равно 'СВЯТОСЛАВ' |
Греков | фамилия клиента не равно 'ГРЕКОВ' |
Пример №4.1.4
Пользователь> выведи адрес склада где больше всего работников
Система v0.46> Вывести поля "адрес" и "количество сотрудников", с группировкой по "адресу", с группировочным условием, что количество разных сотрудников равно максимальному значению, с сортировкой по возрастанию адреса.
select ad.address as "Адрес",
count(distinct s.staff_id) as "Количество сотрудников"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join STAFF s on s.store_id = st.store_id
group by ad.address_id
having count(distinct s.staff_id) = (select max(tmpval) from (
select ad.address as "Адрес",
count(distinct s.staff_id) as tmpval
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join STAFF s on s.store_id = st.store_id
group by ad.address_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
адрес | адрес |
склада где | склад |
больше всего | having by: максимум |
работников | count(сотрудник) |
Пример №4.1.5
Пользователь> В каком офисе Москвы было больше всего сданных в аренду фильмов в категории Мюзикл, в период с 1 января 1950 года по 13 июня 2014
Система v0.46> Вывести поля "склад" и "количество прокатов", с группировкой по "складу", с условием, что "наименование города" равно 'Москва' и "категория фильма" равно 'Музыкальный' и "дата начала аренды" от '1950-01-01 00:00:00' до '2014-06-13 23:59:59' и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию склада.
select (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
count(distinct re.rental_id) as "Количество прокатов"
from STORE st
join ADDRESS ad on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join CITY ci on ad.city_id = ci.city_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ci.city = 'Москва'
and ca.category_id = 12
and re.rental_date between '1950-01-01 00:00:00' and '2014-06-13 23:59:59'
group by st.store_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
count(distinct re.rental_id) as tmpval
from STORE st
join ADDRESS ad on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join CITY ci on ad.city_id = ci.city_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ci.city = 'Москва'
and ca.category_id = 12
and re.rental_date between '1950-01-01 00:00:00' and '2014-06-13 23:59:59'
group by st.store_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
В каком офисе | склад |
Москвы | наименование города - равно 'Москва' |
было больше всего сданных в аренду фильмов | count(прокат) |
в категории | категория |
Мюзикл | идентификатор категории - равно Музыкальный |
, | игнор |
в период с 1 января 1950 года по 13 июня 2014 | дата начала аренды - с 1 января 1950 года по 13 июня 2014 года |
Пример №4.1.6
Пользователь> выведи информацию о клиентах у которых сейчас больше всего на руках фильмов
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что "незавершенная аренда проката" и "дата начала аренды" меньше или равно '2025-06-20 14:16:22' и дата окончания аренды больше или равно '2025-06-20 14:16:22' и существует "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
where re.return_date is null
and re.rental_date <= '2025-06-20 14:16:22'
and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:22'
group by c.customer_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as tmpval
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
where re.return_date is null
and re.rental_date <= '2025-06-20 14:16:22'
and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:22'
group by c.customer_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
выведи информацию | игнор |
о клиентах | клиент |
у которых сейчас | сейчас (2025.06.20 14:16 отн. 2025.06.20 14:16) между дата начала аренды и дата окончания аренды |
больше всего | игнор |
на руках | незавершенная аренда проката |
фильмов | игнор |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select concat(c.first_name, ' ', c.last_name) as "Клиент", count(distinct re.rental_id) as "Количество прокатов" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id where re.return_date is null and re.rental_date <= '2006-02-04 10:30:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-04 10:30:00' group by c.customer_id having count(distinct re.rental_id) = (select max(tmpval) from (select concat(c.first_name, ' ', c.last_name) as "Клиент", count(distinct re.rental_id) as tmpval from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id where re.return_date is null and re.rental_date <= '2006-02-04 10:30:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-04 10:30:00' group by c.customer_id) tmpsel) order by 1 | select concat(c.first_name, ' ', c.last_name) as "Клиент", count(distinct re.rental_id) as "Количество прокатов" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id where re.return_date is null and re.rental_date <= '2025-06-20 14:16:22' and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:22' group by c.customer_id having count(distinct re.rental_id) = (select max(tmpval) from (select concat(c.first_name, ' ', c.last_name) as "Клиент", count(distinct re.rental_id) as tmpval from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id where re.return_date is null and re.rental_date <= '2025-06-20 14:16:22' and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:22' group by c.customer_id) tmpsel) order by 1 |
Пример №4.1.7
Пользователь> лучший фильм по количеству аренды
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
лучший | having by: максимум |
фильм | игнор |
по количеству аренды | count(прокат) |
Пример №4.1.8
Пользователь> в какой день взяли больше всего комедий
Система v0.46> Вывести поля "дата проката" и "количество прокатов", с группировкой по "дате проката", с условием, что "категория фильма" равно 'Комедия' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию даты проката.
select date(re.rental_date) as "Дата проката",
count(distinct re.rental_id) as "Количество прокатов"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5
group by 1
having count(distinct re.rental_id) = (select max(tmpval) from (
select date(re.rental_date) as "Дата проката",
count(distinct re.rental_id) as tmpval
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5
group by 1
order by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в какой день | group by date(re.rental_date) |
взяли | прокат |
больше всего | having count(прокат) = Max |
комедий | идентификатор категории - равно Комедия |
Пример №4.1.9
Пользователь> Фильмы какого жанра берут лучше всего
Система v0.46> Вывести поля "категория" и "количество прокатов", с группировкой по "категории", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию категории.
select ca.name as "Категория",
count(distinct re.rental_id) as "Количество прокатов"
from CATEGORY ca
left join FILM_CATEGORY fc on fc.category_id = ca.category_id
left join FILM f on fc.film_id = f.film_id
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by ca.category_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select ca.name as "Категория",
count(distinct re.rental_id) as tmpval
from CATEGORY ca
left join FILM_CATEGORY fc on fc.category_id = ca.category_id
left join FILM f on fc.film_id = f.film_id
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by ca.category_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы какого жанра | категория |
берут | count(прокат) |
лучше всего | having by: максимум |
Пример №4.1.10
Пользователь> Самый редко арендуемый фильм
Система v0.46> Вывести поля "фильм" и "популярность проката", с группировкой по "фильму", с условием, что существует "прокат" и "фильм на складе", с группировочным условием, что популярность проката равно минимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
having count(distinct re.rental_id) = (select min(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Самый редко | популярность проката = Min |
арендуемый фильм | игнор |
Пример №4.1.11
Пользователь> кроме клиента "Егор Макаров" какой клиент просрочил больше всего фильмов
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что имя клиента (без учета регистра и буквы Ё) не равно 'ЕГОР' или фамилия клиента (без учета регистра) не равно 'МАКАРОВ' и "задержка возвращения проката" и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where (replace(upper(c.first_name), 'Ё', 'Е') != 'ЕГОР' or upper(c.last_name) != 'МАКАРОВ')
and date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
group by c.customer_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as tmpval
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where (replace(upper(c.first_name), 'Ё', 'Е') != 'ЕГОР' or upper(c.last_name) != 'МАКАРОВ')
and date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
group by c.customer_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
кроме | не |
клиента | игнор |
"Егор | имя клиента не равно 'ЕГОР' |
Макаров" | фамилия клиента не равно 'МАКАРОВ' |
какой клиент | клиент |
просрочил | задержка возвращения проката |
больше всего | having by: максимум |
фильмов | count(прокат) |
Пример №4.1.12
Пользователь> в каких регионах корова берется в аренду чаще всего
Система v0.46> Вывести поля "район адреса" и "количество прокатов", с группировкой по "району адреса", с условием, что "название фильма" равно 'Корова' и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию района адреса.
select ad.district as "Район адреса",
count(distinct re.rental_id) as "Количество прокатов"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where f.title = 'Корова'
group by 1
having count(distinct re.rental_id) = (select max(tmpval) from (
select ad.district as "Район адреса",
count(distinct re.rental_id) as tmpval
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where f.title = 'Корова'
group by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в каких регионах | район адреса |
корова | название фильма - равно 'Корова' |
берется | прокат |
в аренду | count(прокат) |
чаще всего | having by: максимум |
Пример №4.1.13
Пользователь> город в котором клиенты арендовали больше всего фильмов в 2006 году
Система v0.46> Вывести поля "город" и "количество прокатов", с группировкой по "городу", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и существует "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию города.
select ci.city as "Город",
count(distinct re.rental_id) as "Количество прокатов"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
group by ci.city_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select ci.city as "Город",
count(distinct re.rental_id) as tmpval
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
group by ci.city_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
город | город |
в котором клиенты | клиент |
арендовали | прокат |
больше всего | having by: максимум |
фильмов | count(прокат) |
в 2006 году | дата начала аренды - 2006 год |
Пример №4.1.14
Пользователь> регион и адрес и идентификатор склада с наибольшим количеством аренд
Система v0.46> Вывести поля "район адреса", "адрес", "идентификатор склада" и "количество прокатов", с группировкой по "району адреса", "адресу" и "идентификатору склада", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию района адреса, по возрастанию адреса и по возрастанию идентификатора склада.
select ad.district as "Район адреса",
ad.address as "Адрес",
st.store_id as "Идентификатор склада",
count(distinct re.rental_id) as "Количество прокатов"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by 1, ad.address_id, 3
having count(distinct re.rental_id) = (select max(tmpval) from (
select ad.district as "Район адреса",
ad.address as "Адрес",
st.store_id as "Идентификатор склада",
count(distinct re.rental_id) as tmpval
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by 1, ad.address_id, 3
) tmpsel)
order by 1, 2, 3
Фрагмент | Интерпретация |
---|---|
регион | район адреса |
и | игнор |
адрес | адрес |
и | игнор |
идентификатор склада | идентификатор склада |
с наибольшим | having by: максимум |
количеством аренд | count(прокат) |
Пример №4.1.15
Пользователь> Имя самого позднего клиента
Система v0.46> Вывести уникальные значения "клиент" и "дата проката", с условием, что "дата проката" равно максимальному значению и существует "прокат", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент",
re.rental_date as "Дата проката"
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id
where re.rental_date = (select max(re.rental_date)
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id)
order by 1
Фрагмент | Интерпретация |
---|---|
Имя | имя клиента |
самого | having by: максимум |
позднего клиента | дата проката = Max |
Пользователь> Самый последний клиент
Система v0.46> Вывести уникальные значения "клиент" и "дата проката", с условием, что "дата проката" равно максимальному значению и существует "прокат", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент",
re.rental_date as "Дата проката"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
where re.rental_date = (select max(re.rental_date)
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id)
order by 1
Фрагмент | Интерпретация |
---|---|
Самый последний | having by: максимум |
клиент | дата проката = Max |
Пользователь> имя первого клиента
Система v0.46> Вывести уникальные значения "клиент" и "дата проката", с условием, что "дата проката" равно минимальному значению и существует "прокат", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент",
re.rental_date as "Дата проката"
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id
where re.rental_date = (select min(re.rental_date)
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id)
order by 1
Фрагмент | Интерпретация |
---|---|
имя | имя клиента |
первого | having by: минимум |
клиента | дата проката = Min |
Пример №4.1.16
Пользователь> какой фильм брали реже всего
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно минимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
having count(distinct re.rental_id) = (select min(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
какой фильм | фильм |
брали | count(прокат) |
реже всего | having by: минимум |
Пример №4.1.17
Пользователь> самый кассовый боевик 2006 года на английском языке
Система v0.46> Вывести поля "фильм" и "сумма платежей", с группировкой по "фильму", с условием, что "категория фильма" равно 'Боевик' и "дата платежа" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и "язык озвучки" равно 'английский' и существует "прокат" и "фильм на складе", с группировочным условием, что сумма платежей равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join LANGUAGE la on f.language_id = la.language_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 1
and p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
and la.language_id = 7
group by f.film_id
having sum(p.amount) = (select max(tmpval) from (
select f.title as "Фильм",
sum(p.amount) as tmpval
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join LANGUAGE la on f.language_id = la.language_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 1
and p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
and la.language_id = 7
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
самый | having by: максимум |
кассовый | max(сумма платежей) |
боевик | идентификатор категории - равно Боевик |
2006 года | дата платежа - 2006 год |
на английском | идентификатор языка озвучки - равно английский |
языке | язык озвучки |
Пример №4.1.18
Пользователь> самый кассовый боевик 2010 года выхода на английском языке
Система v0.46> Вывести поля "фильм" и "сумма платежей", с группировкой по "фильму", с условием, что "категория фильма" равно 'Боевик' и "год выхода фильма" равно 2010 и "язык озвучки" равно 'английский' и существует "прокат" и "фильм на складе", с группировочным условием, что сумма платежей равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join LANGUAGE la on f.language_id = la.language_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 1
and f.release_year = 2010
and la.language_id = 7
group by f.film_id
having sum(p.amount) = (select max(tmpval) from (
select f.title as "Фильм",
sum(p.amount) as tmpval
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join LANGUAGE la on f.language_id = la.language_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 1
and f.release_year = 2010
and la.language_id = 7
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
самый | having by: максимум |
кассовый | max(сумма платежей) |
боевик | идентификатор категории - равно Боевик |
2010 года | год выхода фильма - 2010 год |
выхода | год выхода фильма |
на английском | идентификатор языка озвучки - равно английский |
языке | язык озвучки |
Пример №4.1.19
Пользователь> из какой страны люди охотнее арендуют фильмы
Система v0.46> Вывести поля "страна" и "количество прокатов", с группировкой по "стране", с условием, что существует "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию страны.
select co.country as "Страна",
count(distinct re.rental_id) as "Количество прокатов"
from COUNTRY co
left join CITY ci on ci.country_id = co.country_id
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
group by co.country_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select co.country as "Страна",
count(distinct re.rental_id) as tmpval
from COUNTRY co
left join CITY ci on ci.country_id = co.country_id
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
left join RENTAL re on re.customer_id = c.customer_id
group by co.country_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
из какой страны | страна |
люди | клиент |
охотнее | having by: максимум |
арендуют фильмы | count(прокат) |
Пример №4.1.20
Пользователь> Все работники в Абакане с самой длинной фамилией
Система v0.46> Вывести уникальные значения "сотрудник" и "длина фамилии сотрудника", с условием, что "наименование города" равно 'Абакан' и "длина фамилии сотрудника" равно максимальному значению, с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник",
length(s.last_name) as "Длина фамилии сотрудника"
from STAFF s
join ADDRESS ad on s.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where ci.city = 'Абакан'
and length(s.last_name) = (select max(length(s.last_name))
from STAFF s
join ADDRESS ad on s.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where ci.city = 'Абакан')
order by 1
Фрагмент | Интерпретация |
---|---|
Все | игнор |
работники | сотрудник |
в Абакане | наименование города - равно 'Абакан' |
с самой длинной фамилией | длина фамилии сотрудника = Max |
Пример №4.1.21
Пользователь> какой фильм задерживали при возврате чаще всего
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что "задержка возвращения проката" и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
какой фильм | фильм |
задерживали при возврате | задержка возвращения проката |
чаще всего | игнор |
Пример №4.1.22
Пользователь> покажи информацию клиента с максимальной суммой платежей где имя фильма начинается на букву 'С' и фильм выпущен раньше 2010 года
Система v0.46> Вывести поля "клиент", "фильм" и "сумма платежей", с группировкой по "клиенту" и "фильму", с условием, что "название фильма" начинается с 'С' и "год выхода фильма" меньше 2010 и существует "прокат" и "фильм на складе", с группировочным условием, что сумма платежей равно максимальному значению, с сортировкой по возрастанию клиента и по возрастанию фильма.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join PAYMENT p on p.customer_id = c.customer_id
left join RENTAL re on p.rental_id = re.rental_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where upper(f.title) like 'С%'
and f.release_year < 2010
group by c.customer_id, f.film_id
having sum(p.amount) = (select max(tmpval) from (
select concat(c.first_name, ' ', c.last_name) as "Клиент",
f.title as "Фильм",
sum(p.amount) as tmpval
from CUSTOMER c
left join PAYMENT p on p.customer_id = c.customer_id
left join RENTAL re on p.rental_id = re.rental_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where upper(f.title) like 'С%'
and f.release_year < 2010
group by c.customer_id, f.film_id
) tmpsel)
order by 1, 2
Фрагмент | Интерпретация |
---|---|
покажи информацию | игнор |
клиента | клиент |
с максимальной суммой платежей | сумма платежей = Max |
где | игнор |
имя фильма начинается на букву 'С' | название фильма - like 'С%' |
и | игнор |
фильм | фильм |
выпущен раньше 2010 года | год выхода фильма - 2010 год |
Пример №4.1.23
Пользователь> Покажи фильмы которые брали реже всего
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно минимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
having count(distinct re.rental_id) = (select min(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
фильмы | фильм |
которые брали | count(прокат) |
реже всего | having by: минимум |
Пример №4.1.24
Пользователь> самый доходный фильм 2005 года
Система v0.46> Вывести поля "фильм" и "сумма платежей", с группировкой по "фильму", с условием, что "дата платежа" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что сумма платежей равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where p.payment_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by f.film_id
having sum(p.amount) = (select max(tmpval) from (
select f.title as "Фильм",
sum(p.amount) as tmpval
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where p.payment_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
самый доходный | sum(p.amount) having: равно максимуму |
фильм | фильм |
2005 года | дата платежа - 2005 год |
Пример №4.1.25
Пользователь> в каком месяце клиент Сергей крылов заплатил больше всего
Система v0.46> Вывести поля "месяц с годом платежа" и "сумма платежей", с группировкой по "месяцу с годом платежа", с условием, что имя клиента (без учета регистра и буквы Ё) равно 'СЕРГЕЙ' и фамилия клиента (без учета регистра) равно 'КРЫЛОВ', с группировочным условием, что сумма платежей равно максимальному значению, с сортировкой по возрастанию месяца с годом платежа.
select date_trunc('month', p.payment_date) as "Месяц с годом платежа",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
join PAYMENT p on p.customer_id = c.customer_id
where replace(upper(c.first_name), 'Ё', 'Е') = 'СЕРГЕЙ'
and upper(c.last_name) = 'КРЫЛОВ'
group by 1
having sum(p.amount) = (select max(tmpval) from (
select date_trunc('month', p.payment_date) as "Месяц с годом платежа",
sum(p.amount) as tmpval
from CUSTOMER c
join PAYMENT p on p.customer_id = c.customer_id
where replace(upper(c.first_name), 'Ё', 'Е') = 'СЕРГЕЙ'
and upper(c.last_name) = 'КРЫЛОВ'
group by 1
order by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в каком месяце | group by date_trunc('month', p.payment_date) |
клиент | клиент |
Сергей | имя клиента равно 'СЕРГЕЙ' |
крылов | фамилия клиента равно 'КРЫЛОВ' |
заплатил | having by: максимум |
больше всего | сумма платежей = Max |
Пример №4.1.26
Пользователь> какого числа арендовали больше всего фильмов
Система v0.46> Вывести поля "дата проката" и "количество прокатов", с группировкой по "дате проката", с условием, что существует "прокат", с группировочным условием, что количество прокатов равно максимальному значению, с сортировкой по возрастанию даты проката.
select date(re.rental_date) as "Дата проката",
count(re.rental_id) as "Количество прокатов"
from RENTAL re
group by 1
having count(re.rental_id) = (select max(tmpval) from (
select date(re.rental_date) as "Дата проката",
count(re.rental_id) as tmpval
from RENTAL re
group by 1
order by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
какого числа | group by date(re.rental_date) |
арендовали | прокат |
больше всего | having by: максимум |
фильмов | count(прокат) |
Пример №4.1.27
Пользователь> Покажи сотрудника который больше всех отдал фильмов в прокат
Система v0.46> Вывести поля "сотрудник" и "количество прокатов", с группировкой по "сотруднику", с условием, что существует "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию сотрудника.
select concat(s.first_name, ' ', s.last_name) as "Сотрудник",
count(distinct re.rental_id) as "Количество прокатов"
from STAFF s
left join RENTAL re on re.staff_id = s.staff_id
group by s.staff_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select concat(s.first_name, ' ', s.last_name) as "Сотрудник",
count(distinct re.rental_id) as tmpval
from STAFF s
left join RENTAL re on re.staff_id = s.staff_id
group by s.staff_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
сотрудника | сотрудник |
который больше всех отдал фильмов | count(прокат) |
в прокат | прокат |
Пример №4.1.28
Пользователь> На каком языке больше всего фильмов
Система v0.46> Вывести поля "язык озвучки" и "количество фильмов", с группировкой по "языку озвучки", с группировочным условием, что количество разных фильмов равно максимальному значению, с сортировкой по возрастанию языка озвучки.
select la.name as "Язык озвучки",
count(distinct f.film_id) as "Количество фильмов"
from LANGUAGE la
left join FILM f on f.language_id = la.language_id
group by la.language_id
having count(distinct f.film_id) = (select max(tmpval) from (
select la.name as "Язык озвучки",
count(distinct f.film_id) as tmpval
from LANGUAGE la
left join FILM f on f.language_id = la.language_id
group by la.language_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
На каком языке | язык озвучки |
больше всего | having by: максимум |
фильмов | count(фильм) |
Пример №4.1.29
Пользователь> страны с наименьшим числом покупателей
Система v0.46> Вывести поля "страна" и "количество клиентов", с группировкой по "стране", с группировочным условием, что количество разных клиентов равно минимальному значению, с сортировкой по возрастанию страны.
select co.country as "Страна",
count(distinct c.customer_id) as "Количество клиентов"
from COUNTRY co
left join CITY ci on ci.country_id = co.country_id
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
group by co.country_id
having count(distinct c.customer_id) = (select min(tmpval) from (
select co.country as "Страна",
count(distinct c.customer_id) as tmpval
from COUNTRY co
left join CITY ci on ci.country_id = co.country_id
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
group by co.country_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
страны | страна |
с наименьшим | having by: минимум |
числом покупателей | count(клиент) |
Пример №4.1.30
Пользователь> Покажи города с максимальным количеством клиентов
Система v0.46> Вывести поля "город" и "количество клиентов", с группировкой по "городу", с группировочным условием, что количество разных клиентов равно максимальному значению, с сортировкой по возрастанию города.
select ci.city as "Город",
count(distinct c.customer_id) as "Количество клиентов"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
group by ci.city_id
having count(distinct c.customer_id) = (select max(tmpval) from (
select ci.city as "Город",
count(distinct c.customer_id) as tmpval
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
left join CUSTOMER c on c.address_id = ad.address_id
group by ci.city_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
города | город |
с максимальным | having by: максимум |
количеством клиентов | count(клиент) |
Пример №4.1.31
Пользователь> какой фильм самый популярный
Система v0.46> Вывести поля "фильм" и "популярность проката", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что популярность проката равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Популярность проката"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
какой фильм | фильм |
самый | having by: максимум |
популярный | популярность проката = Max |
Пример №4.1.32
Пользователь> полное имя клиента который последний вернул копию фильма "корова"
Система v0.46> Вывести поля "фио клиента" и "максимум даты возврата", с группировкой по "фио клиента", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с группировочным условием, что максимум даты возврата равно максимальному значению, с сортировкой по возрастанию фио клиента.
select concat(c.first_name, ' ', c.last_name) as "Фио клиента",
max(re.return_date) as "Максимум даты возврата"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where f.title = 'Корова'
group by 1
having max(re.return_date) = (select max(tmpval) from (
select concat(c.first_name, ' ', c.last_name) as "Фио клиента",
max(re.return_date) as tmpval
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where f.title = 'Корова'
group by 1
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
полное имя клиента | фио клиента |
который последний вернул | re.return_date having: равно максимуму |
копию фильма | фильм на складе |
"корова" | название фильма - равно 'Корова' |
Пример №4.1.33
Пользователь> в каком городе больше всего районов
Система v0.46> Вывести поля "город" и "количество разных районов адреса", с группировкой по "городу", с группировочным условием, что количество разных районов адреса равно максимальному значению, с сортировкой по возрастанию города.
select ci.city as "Город",
count(distinct ad.district) as "Количество разных районов адреса"
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
group by ci.city_id
having count(distinct ad.district) = (select max(tmpval) from (
select ci.city as "Город",
count(distinct ad.district) as tmpval
from CITY ci
left join ADDRESS ad on ad.city_id = ci.city_id
group by ci.city_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
в каком городе | город |
больше всего районов | count(район адреса) |
Пример №4.1.34
Пользователь> Какой фильм чаще всего не возвращают
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что ??? пустой и ??? больше и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where re.return_date is null
and date_part('day', current_timestamp - re.rental_date) > f.rental_duration
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where re.return_date is null
and date_part('day', current_timestamp - re.rental_date) > f.rental_duration
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Какой фильм | фильм |
чаще всего | игнор |
не возвращают | истекший срок проката |
Пользователь> Какой фильм не возвращают чаще всего
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что ??? пустой и ??? больше и существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where re.return_date is null
and date_part('day', current_timestamp - re.rental_date) > f.rental_duration
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.title as "Фильм",
count(distinct re.rental_id) as tmpval
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where re.return_date is null
and date_part('day', current_timestamp - re.rental_date) > f.rental_duration
group by f.film_id
) tmpsel)
order by 1
Фрагмент | Интерпретация |
---|---|
Какой фильм | фильм |
не возвращают | истекший срок проката |
чаще всего | игнор |

Пример №4.2.1
Пользователь> Фильмы с одним актёром
Система v0.46> Вывести поля "фильм" и "количество актеров", с группировкой по "фильму", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных актеров равно 1, с сортировкой по убыванию количества актеров и по возрастанию фильма.
select f.title as "Фильм",
count(distinct a.actor_id) as "Количество актеров"
from FILM f
left join FILM_ACTOR fa on fa.film_id = f.film_id
left join ACTOR a on fa.actor_id = a.actor_id
group by f.film_id
having count(distinct a.actor_id) = 1
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
с одним актёром | count(актер) having by 1 |
Пример №4.2.2
Пользователь> Покажи всех покупателей, взявших в аренду более одного Фильма за 2006
Система v0.46> Вывести поля "клиент" и "количество фильмов", с группировкой по "клиенту", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов больше 1, с сортировкой по убыванию количества фильмов и по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct f.film_id) as "Количество фильмов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
group by c.customer_id
having count(distinct f.film_id) > 1
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Покажи всех | игнор |
покупателей | клиент |
, | игнор |
взявших в аренду | прокат |
более одного Фильма | count(фильм) having by ]1 .. [ |
за 2006 | дата начала аренды - 2006 год |
Пример №4.2.3
Пользователь> кто из сотрудников продал меньше 100 фильмов
Система v0.46> Вывести поля "сотрудник" и "количество фильмов", с группировкой по "сотруднику", с условием, что существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов меньше 100, с сортировкой по убыванию количества фильмов и по возрастанию сотрудника.
select concat(s.first_name, ' ', s.last_name) as "Сотрудник",
count(distinct f.film_id) as "Количество фильмов"
from STAFF s
left join RENTAL re on re.staff_id = s.staff_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
group by s.staff_id
having count(distinct f.film_id) < 100
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
кто из сотрудников | сотрудник |
продал | прокат |
меньше 100 фильмов | count(фильм) having by ] .. 100[ |
Пример №4.2.4
Пользователь> вывести актёров, которые снялись в фильмах всех жанров
Система v0.46> Вывести поля "актер" и "количество разных категорий", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных категорий для каждого актера равно количеству разных категорий всего, с сортировкой по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct ca.category_id) as "Количество разных категорий"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by a.actor_id
having count(distinct ca.category_id) = (select count(distinct ca.category_id) from CATEGORY ca)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
актёров | актер |
, | игнор |
которые снялись | игра актёра в фильме |
в фильмах | фильм |
всех | ВСЕ |
жанров | с каждым категория |
Пользователь> вывести актёров, которые снялись в фильмах каждого жанра
Система v0.46> Вывести поля "актер" и "количество разных категорий", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных категорий для каждого актера равно количеству разных категорий всего, с сортировкой по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct ca.category_id) as "Количество разных категорий"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by a.actor_id
having count(distinct ca.category_id) = (select count(distinct ca.category_id) from CATEGORY ca)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
актёров | актер |
, | игнор |
которые снялись | игра актёра в фильме |
в фильмах | фильм |
каждого | ВСЕ |
жанра | с каждым категория |
Пример №4.2.5
Пользователь> Какой актер снялся в фильмах со всеми рейтингами
Система v0.46> Вывести поля "актер" и "количество разных возрастных рейтингов фильма", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных возрастных рейтингов для каждого актера равно количеству разных возрастных рейтингов всего, с сортировкой по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct f.rating) as "Количество разных возрастных рейтингов фильма"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
having count(distinct f.rating) = (select count(distinct f.rating) from FILM f)
order by 1
Фрагмент | Интерпретация |
---|---|
Какой актер | актер |
снялся | игра актёра в фильме |
в фильмах | фильм |
со всеми рейтингами | с каждым возрастной рейтинг |
Пример №4.2.6
Пользователь> выведи список магазинов в которых средний срок аренды не превышает три недели
Система v0.46> Вывести поля "склад" и "среднее количество дней проката", с группировкой по "складу", с условием, что "аренда завершена проката" и существует "фильм на складе" и "прокат", с группировочным условием, что среднее количество дней проката меньше или равно 21, с сортировкой по возрастанию склада.
select (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
avg(date_part('day', re.return_date - re.rental_date)) as "Среднее количество дней проката"
from STORE st
left join INVENTORY iv on iv.store_id = st.store_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where re.return_date is not null
group by st.store_id
having avg(date_part('day', re.return_date - re.rental_date)) <= 21
order by 1
Фрагмент | Интерпретация |
---|---|
выведи список | игнор |
магазинов | склад |
в которых средний срок аренды не превышает три недели | avg(количество дней проката) having: равно ]3 .. [ нед |
Пример №4.2.7
Пользователь> Фильмы которые брали 10 раз и более
Система v0.46> Вывести поля "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с группировочным условием, что количество разных прокатов больше или равно 10, с сортировкой по убыванию количества прокатов и по возрастанию фильма.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
having count(distinct re.rental_id) >= 10
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
которые брали | прокат |
10 раз и более | count(прокат) having by [10 .. [ раз |
Пример №4.2.8
Пользователь> Сколько актеров снимались в нескольких фильмах, представленных в прокатной базе
Система v0.46> Вывести "количество разных актеров", с условием, что "актеры", "игры актёра в фильме" и "фильмы", с группировкой по "актеру", с группировочным условием, что количество разных фильмов больше 1.
select count(distinct tmpsel.tmpval) as "Количество разных актеров" from (
select a.actor_id as tmpval,
count(distinct f.film_id) as "Количество фильмов"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
having count(distinct f.film_id) > 1
) tmpsel
Фрагмент | Интерпретация |
---|---|
Сколько актеров | count(актер) |
снимались | игра актёра в фильме |
в нескольких фильмах | count(фильм) having by ]1 .. [ |
, представленных в прокатной базе | игнор |
Пример №4.2.9
Пользователь> сколько актеров снявшихся всего лишь в одном фильме
Система v0.46> Вывести "количество разных актеров", с условием, что "актеры", "игры актёра в фильме" и "фильмы", с группировкой по "актеру", с группировочным условием, что количество разных фильмов равно 1.
select count(distinct tmpsel.tmpval) as "Количество разных актеров" from (
select a.actor_id as tmpval,
count(distinct f.film_id) as "Количество фильмов"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
having count(distinct f.film_id) = 1
) tmpsel
Фрагмент | Интерпретация |
---|---|
сколько актеров | count(актер) |
снявшихся | игра актёра в фильме |
всего лишь | игнор |
в одном фильме | count(фильм) having by 1 |
Пример №4.2.10
Пользователь> сколько всего складов на которых больше одного фильма
Система v0.46> Вывести "количество разных складов", с условием, что "склады", "фильмы на складе" и "фильмы", с группировкой по "складу", с группировочным условием, что количество разных фильмов больше 1.
select count(distinct tmpsel.tmpval) as "Количество разных складов" from (
select st.store_id as tmpval,
count(distinct f.film_id) as "Количество фильмов"
from STORE st
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
group by st.store_id
having count(distinct f.film_id) > 1
) tmpsel
Фрагмент | Интерпретация |
---|---|
сколько всего складов | count(склад) |
на которых больше одного фильма | count(фильм) having by ]1 .. [ |
Пример №4.2.11
Пользователь> покажи всех клиентов, которые брали фильмы о войне в прокат не менее 5 раз
Система v0.46> Вывести поля "клиент" и "количество прокатов", с группировкой по "клиенту", с условием, что "категория фильма" равно 'Боевик' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов больше или равно 5, с сортировкой по убыванию количества прокатов и по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 1
group by c.customer_id
having count(distinct re.rental_id) >= 5
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
покажи всех | игнор |
клиентов | клиент |
, | игнор |
которые брали фильмы | прокат |
о войне | идентификатор категории - равно Боевик |
в прокат | прокат |
не менее 5 раз | count(прокат) having by not ] .. 5[ раз |
Пример №4.2.12
Пользователь> 8) Выведите клиентов, которые в 2005 году арендовали более 20 фильмов за месяц, а также сумму платежей, количество фильмов, и номер месяца, сортировка по убыванию суммы платежей
Система v0.46> Вывести поля "клиент", "месяц с годом проката", "количество фильмов" и "сумма платежей", с группировкой по "клиенту" и "месяцу с годом проката", с условием, что "дата начала аренды" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов больше 20, с сортировкой по убыванию суммы платежей.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
date_trunc('month', re.rental_date) as "Месяц с годом проката",
count(distinct f.film_id) as "Количество фильмов",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join PAYMENT p on p.rental_id = re.rental_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by c.customer_id, 2
having count(distinct f.film_id) > 20
order by 4 desc nulls last
Фрагмент | Интерпретация |
---|---|
8) Выведите | игнор |
клиентов | клиент |
, | игнор |
которые в 2005 году | дата начала аренды - 2005 год |
арендовали | прокат |
более 20 фильмов за месяц | count(фильм) having by ]20 .. [ group monthly |
, а также | игнор |
сумму платежей | сумма платежей |
, | игнор |
количество фильмов | count(фильм) |
, и номер месяца, | игнор |
сортировка по убыванию суммы платежей | order by |
Пользователь> от 20 до 30 фильмов за весь период
Система v0.46> Вывести поля "клиент", "месяц с годом проката", "количество фильмов" и "сумма платежей", с группировкой по ""идентификатору клиента"" и "месяцу с годом проката", с условием, что true и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов от 20 до 30, с сортировкой по убыванию суммы платежей.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
date_trunc('month', re.rental_date) as "Месяц с годом проката",
count(distinct f.film_id) as "Количество фильмов",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join PAYMENT p on p.rental_id = re.rental_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where true
group by c.customer_id, 2
having count(distinct f.film_id) between 20 and 30
order by 4 desc nulls last
Фрагмент | Интерпретация |
---|---|
от 20 до 30 фильмов | having - [20 .. 30] |
за весь период | дата начала аренды - весь период |
Пользователь> а в этом году
Система v0.46> Вывести поля "клиент", "месяц с годом проката", "количество фильмов" и "сумма платежей", с группировкой по ""идентификатору клиента"" и "месяцу с годом проката", с условием, что "дата начала аренды" от '2025-01-01 00:00:00' до '2025-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов от 20 до 30, с сортировкой по убыванию суммы платежей.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
date_trunc('month', re.rental_date) as "Месяц с годом проката",
count(distinct f.film_id) as "Количество фильмов",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join PAYMENT p on p.rental_id = re.rental_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where re.rental_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59'
group by c.customer_id, 2
having count(distinct f.film_id) between 20 and 30
order by 4 desc nulls last
Фрагмент | Интерпретация |
---|---|
а | игнор |
в этом году | дата начала аренды - текущий год (2025.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59' group by c.customer_id, 2 having count(distinct f.film_id) > 20 order by 4 desc nulls last
select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where true group by c.customer_id, 2 having count(distinct f.film_id) between 20 and 30 order by 4 desc nulls last select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59' group by c.customer_id, 2 having count(distinct f.film_id) between 20 and 30 order by 4 desc nulls last | select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59' group by c.customer_id, 2 having count(distinct f.film_id) > 20 order by 4 desc nulls last
select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where true group by c.customer_id, 2 having count(distinct f.film_id) between 20 and 30 order by 4 desc nulls last select concat(c.first_name, ' ', c.last_name) as "Клиент", date_trunc('month', re.rental_date) as "Месяц с годом проката", count(distinct f.film_id) as "Количество фильмов", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join RENTAL re on re.customer_id = c.customer_id left join PAYMENT p on p.rental_id = re.rental_id left join INVENTORY iv on re.inventory_id = iv.inventory_id left join FILM f on iv.film_id = f.film_id where re.rental_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59' group by c.customer_id, 2 having count(distinct f.film_id) between 20 and 30 order by 4 desc nulls last |
Пример №4.2.13
Пользователь> Вывести всех актеров y которых количество комедий с актеров участием больше 2
Система v0.46> Вывести поля "актер" и "количество игр актёра в фильме", с группировкой по "актеру", с условием, что "категория фильма" равно 'Комедия' и существует "игра актёра в фильме", с группировочным условием, что количество разных игр актёра в фильме больше 2, с сортировкой по убыванию количества игр актёра в фильме и по возрастанию актера.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct f.film_id) as "Количество игр актёра в фильме"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5
group by a.actor_id
having count(distinct f.film_id) > 2
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Вывести всех | игнор |
актеров | актер |
y | игнор |
которых количество | count(фильм) |
комедий | идентификатор категории - равно Комедия |
с актеров | актер |
участием | игра актёра в фильме |
больше 2 | count(игра актёра в фильме) having by ]2 .. [ |
Пример №4.2.14
Пользователь> Выведите клиентов, которые в 2005 году арендовали более 20 фильмов
Система v0.46> Вывести поля "клиент" и "количество фильмов", с группировкой по "клиенту", с условием, что "дата начала аренды" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов больше 20, с сортировкой по убыванию количества фильмов и по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct f.film_id) as "Количество фильмов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by c.customer_id
having count(distinct f.film_id) > 20
order by 2 desc nulls last, 1
Фрагмент | Интерпретация |
---|---|
Выведите | игнор |
клиентов | клиент |
, | игнор |
которые в 2005 году | дата начала аренды - 2005 год |
арендовали | прокат |
более 20 фильмов | count(фильм) having by ]20 .. [ |
Пример №4.2.15
Пользователь> Выведите клиентов, которые в 2005 году арендовали более 20 фильмов за месяц
Система v0.46> Вывести поля "клиент", "месяц с годом проката" и "количество фильмов", с группировкой по "клиенту" и "месяцу с годом проката", с условием, что "дата начала аренды" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов больше 20, с сортировкой по возрастанию клиента и по возрастанию месяца с годом проката.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
date_trunc('month', re.rental_date) as "Месяц с годом проката",
count(distinct f.film_id) as "Количество фильмов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
where re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
group by c.customer_id, 2
having count(distinct f.film_id) > 20
order by 1, 2
Фрагмент | Интерпретация |
---|---|
Выведите | игнор |
клиентов | клиент |
, | игнор |
которые в 2005 году | дата начала аренды - 2005 год |
арендовали | прокат |
более 20 фильмов за месяц | count(фильм) having by ]20 .. [ group monthly |
Пример №4.2.16
Пользователь> фильмы с количеством актёров больше двух, сортируй по количеству в убывающем порядке
Система v0.46> Вывести поля "фильм" и "количество актеров", с группировкой по "фильму", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных актеров больше 2, с сортировкой по убыванию количества актеров.
select f.title as "Фильм",
count(distinct a.actor_id) as "Количество актеров"
from FILM f
left join FILM_ACTOR fa on fa.film_id = f.film_id
left join ACTOR a on fa.actor_id = a.actor_id
group by f.film_id
having count(distinct a.actor_id) > 2
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
с количеством актёров больше двух | count(актер) having: равно ]2 .. [ |
, | игнор |
сортируй по количеству в убывающем порядке | order by |
Пользователь> меньше трёх артистов
Система v0.46> Вывести поля "фильм" и "количество актеров", с группировкой по ""идентификатору фильма"", с условием, что существует "игра актёра в фильме", с группировочным условием, что количество разных актеров меньше 3, с сортировкой по убыванию количества актеров.
select f.title as "Фильм",
count(distinct a.actor_id) as "Количество актеров"
from FILM f
left join FILM_ACTOR fa on fa.film_id = f.film_id
left join ACTOR a on fa.actor_id = a.actor_id
group by f.film_id
having count(distinct a.actor_id) < 3
order by 2 desc nulls last
Фрагмент | Интерпретация |
---|---|
меньше трёх артистов | having - ] .. 3[ |
Пример №4.2.17
Пользователь> Покажите всех клиентов, с фамилией, начинающейся на А и длиной до 10 символов, делающих заказы реже одного раза за квартал
Система v0.46> Вывести поля "клиент", "квартал проката" и "количество прокатов", с группировкой по "клиенту" и "кварталу проката", с условием, что "фамилия клиента" начинается с 'А' и "длина фамилии клиента" меньше или равно 10 и существует "прокат", с группировочным условием, что количество разных прокатов меньше 1, с сортировкой по возрастанию клиента и по возрастанию квартала проката.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
date_trunc('quarter', re.rental_date) as "Квартал проката",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
where upper(c.last_name) like 'А%'
and length(c.last_name) <= 10
group by c.customer_id, 2
having count(distinct re.rental_id) < 1
order by 1, 2
Фрагмент | Интерпретация |
---|---|
Покажите всех | игнор |
клиентов | клиент |
, | игнор |
с фамилией, начинающейся на А | фамилия клиента - like 'А%' |
и | игнор |
длиной до 10 символов | "длина фамилии клиента" меньше или равно 10 |
, делающих | игнор |
заказы | прокат |
реже одного раза за квартал | count(прокат) having by ] .. 1[ раз group quartly |

Пример №5.1
Пользователь> 50 наиболее потратившихся в феврале клиентов
Система v0.46> Вывести топ 50 записей "клиент" и "сумма платежей", с группировкой по "клиенту", с условием, что "дата платежа" от '2025-02-01 00:00:00' до '2025-02-28 23:59:59', с сортировкой по убыванию суммы платежей.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
sum(p.amount) as "Сумма платежей"
from CUSTOMER c
left join PAYMENT p on p.customer_id = c.customer_id
where p.payment_date between '2025-02-01 00:00:00' and '2025-02-28 23:59:59'
group by c.customer_id
order by 2 desc nulls last
limit 50
Фрагмент | Интерпретация |
---|---|
50 наиболее потратившихся в феврале клиентов | limit 50 самых больших |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select concat(c.first_name, ' ', c.last_name) as "Клиент", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join PAYMENT p on p.customer_id = c.customer_id where p.payment_date between '2006-02-01 00:00:00' and '2006-02-28 23:59:59' group by c.customer_id order by 2 desc nulls last limit 50 | select concat(c.first_name, ' ', c.last_name) as "Клиент", sum(p.amount) as "Сумма платежей" from CUSTOMER c left join PAYMENT p on p.customer_id = c.customer_id where p.payment_date between '2025-02-01 00:00:00' and '2025-02-28 23:59:59' group by c.customer_id order by 2 desc nulls last limit 50 |
Пример №5.2
Пользователь> 15) Вывести 3 самых плохо продаваемых фильма в категории Sports
Система v0.46> Вывести топ 3 записей "фильм" и "сумма платежей", с группировкой по "фильму", с условием, что "категория фильма" равно 'Спорт' и существует "фильм на складе" и "прокат", с сортировкой по возрастанию суммы платежей.
select f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join CATEGORY ca on fc.category_id = ca.category_id
left join PAYMENT p on p.rental_id = re.rental_id
where ca.category_id = 15
group by f.film_id
order by 2
limit 3
Фрагмент | Интерпретация |
---|---|
15) Вывести | игнор |
3 самых плохо продаваемых фильма | limit 3 самых маленьких |
в категории | категория |
Sports | идентификатор категории - равно Спорт |
Пример №5.3
Пользователь> 17) Выведите топ 3 самых плохо продаваемых фильмов в каждой категории
Система v0.46> Вывести поля "категория", "фильм" и "сумма платежей", с условием, что "фильмы", "фильмы на складе", "прокаты" и "платежи", с группировкой по "фильму" и "категории", с сортировкой по возрастанию категории, а для каждой записи "категория" вывести топ 3 записей "фильм", "категория" и "сумма платежей", с группировкой по "фильму" и "категории", с условием, что существует "фильм на складе" и "прокат", с сортировкой по возрастанию суммы платежей.
select ca.name as "Категория",
tmptab.tmpcol1 as "Фильм",
tmptab.tmpcol2 as "Сумма платежей"
from CATEGORY ca
left join lateral (
select f.title as tmpcol1,
sum(p.amount) as tmpcol2
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join PAYMENT p on p.rental_id = re.rental_id
where fc.category_id = ca.category_id
group by f.film_id, ca.category_id
order by 2
limit 3
) tmptab on true
order by 1
Фрагмент | Интерпретация |
---|---|
17) Выведите | игнор |
топ | топ |
3 самых плохо продаваемых фильмов | limit 3 самых маленьких |
в каждой | ВСЕ |
категории | категория |
Пример №5.4
Пользователь> выведите имена десяти клиентов которые брали больше всех фильмов
Система v0.46> Вывести топ 10 записей "имя клиента", "клиент" и "количество фильмов", с группировкой по "имени клиента" и "клиенту", с условием, что существует "прокат" и "фильм на складе", с сортировкой по убыванию количества фильмов.
select c.first_name as "Имя клиента",
concat(c.first_name, ' ', c.last_name) as "Клиент",
count(distinct f.film_id) as "Количество фильмов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
group by 1, c.customer_id
order by 3 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
выведите | игнор |
имена | имя клиента |
десяти | limit 10 |
клиентов | клиент |
которые брали | игнор |
больше всех фильмов | count(фильм) |
Пример №5.5
Пользователь> Покажи 10 фильмов которые собрали больше всего денег
Система v0.46> Вывести топ 10 записей "фильм" и "сумма платежей", с группировкой по "фильму", с условием, что существует "фильм на складе" и "прокат", с сортировкой по убыванию суммы платежей.
select f.title as "Фильм",
sum(p.amount) as "Сумма платежей"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
left join PAYMENT p on p.rental_id = re.rental_id
group by f.film_id
order by 2 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
10 фильмов которые собрали | limit 10 с max |
больше всего денег | сумма платежей |
Пример №5.6
Пользователь> второй фильм по популярности
Система v0.46> Вывести топовую запись с 2-й записи "фильм" и "популярность проката", с группировкой по "фильму", с условием, что существует "прокат" и "фильм на складе", с сортировкой по убыванию популярности проката.
select f.title as "Фильм",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
order by 2 desc nulls last
limit 1 offset 1
Фрагмент | Интерпретация |
---|---|
второй фильм по популярности | limit 1 offset 2 по популярность проката |
Пользователь> третий фильм по продолжительности
Система v0.46> Вывести топовую запись с 3-й записи "фильм" и "продолжительность фильма", с сортировкой по убыванию продолжительности фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
order by 2 desc nulls last
limit 1 offset 2
Фрагмент | Интерпретация |
---|---|
третий фильм по продолжительности | limit 1 offset 3 по продолжительность фильма |
Пример №5.7
Пользователь> Список десяти последних клиентов
Система v0.46> Вывести топ 10 записей "дата проката" и "клиент", с условием, что существует "прокат", с сортировкой по убыванию даты проката.
select re.rental_date as "Дата проката",
concat(c.first_name, ' ', c.last_name) as "Клиент"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
order by 1 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
Список | игнор |
десяти последних клиентов | limit 10 самых больших |
Пользователь> Список десяти последних клиентов
Система v0.46> Вывести топ 10 записей "дата проката" и "клиент", с условием, что существует "прокат", с сортировкой по убыванию даты проката.
select re.rental_date as "Дата проката",
concat(c.first_name, ' ', c.last_name) as "Клиент"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
order by 1 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
Список | игнор |
десяти последних клиентов | limit 10 самых больших |
Пример №5.8
Пользователь> десять фильмов с самым коротким названием
Система v0.46> Вывести топ 10 записей "фильм" и "длина названия фильма", с сортировкой по возрастанию длины названия фильма.
select f.title as "Фильм",
length(f.title) as "Длина названия фильма"
from FILM f
order by 2
limit 10
Фрагмент | Интерпретация |
---|---|
десять фильмов с самым коротким | limit 10 с min |
названием | длина названия фильма |
Пример №5.9
Пользователь> Покажи пять актеров, которые больше всех снимались
Система v0.46> Вывести топ 5 записей "актер" и "количество игр актёра в фильме", с группировкой по "актеру", с условием, что существует "игра актёра в фильме", с сортировкой по убыванию количества игр актёра в фильме.
select concat(a.first_name, ' ', a.last_name) as "Актер",
count(distinct f.film_id) as "Количество игр актёра в фильме"
from ACTOR a
left join FILM_ACTOR fa on fa.actor_id = a.actor_id
left join FILM f on fa.film_id = f.film_id
group by a.actor_id
order by 2 desc nulls last
limit 5
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
пять актеров, которые больше всех | limit 5 с max |
снимались | игра актёра в фильме |
Пример №5.10
Пользователь> город и адрес и фамилия ста первых клиентов аренда за январь 2006
Система v0.46> Вывести топ 100 записей "город", "адрес", "фамилия клиента" и "дата проката", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-01-31 23:59:59' и существует "прокат", с сортировкой по возрастанию даты проката.
select distinct ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
re.rental_date as "Дата проката"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join CUSTOMER c on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-01-31 23:59:59'
order by 4
limit 100
Фрагмент | Интерпретация |
---|---|
город | город |
и | игнор |
адрес | адрес |
и | игнор |
фамилия | фамилия клиента |
ста | limit 100 |
первых клиентов | дата проката |
аренда | прокат |
за январь 2006 | дата начала аренды - январь 2006 года |
Пользователь> город и адрес и фамилия 100 первых клиентов аренда за январь 2006
Система v0.46> Вывести топ 100 записей "город", "адрес", "фамилия клиента" и "дата проката", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-01-31 23:59:59' и существует "прокат", с сортировкой по возрастанию даты проката.
select distinct ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
re.rental_date as "Дата проката"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join CUSTOMER c on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-01-31 23:59:59'
order by 4
limit 100
Фрагмент | Интерпретация |
---|---|
город | город |
и | игнор |
адрес | адрес |
и | игнор |
фамилия | фамилия клиента |
100 | limit 100 |
первых клиентов | дата проката |
аренда | прокат |
за январь 2006 | дата начала аренды - январь 2006 года |
Пример №5.11
Пользователь> 100 первых прокатов отсортированных по дате
Система v0.46> Вывести топ 100 записей "дата начала аренды" и "фильм", с условием, что существует "прокат" и "фильм на складе", с сортировкой по возрастанию даты начала аренды.
select re.rental_date as "Дата начала аренды",
f.title as "Фильм"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
order by 1
limit 100
Фрагмент | Интерпретация |
---|---|
100 первых прокатов | limit 100 самых маленьких |
отсортированных | order by |
по дате | дата начала аренды |
Пример №5.12
Пользователь> город и адрес и фамилия клиентов для 100 первых прокатов за февраль 2006
Система v0.46> Вывести топ 100 записей "город", "адрес", "фамилия клиента", "фильм" и "дата начала аренды", с условием, что "дата начала аренды" от '2006-02-01 00:00:00' до '2006-02-28 23:59:59' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию даты начала аренды.
select distinct ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
f.title as "Фильм",
re.rental_date as "Дата начала аренды"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join CUSTOMER c on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.rental_date between '2006-02-01 00:00:00' and '2006-02-28 23:59:59'
order by 5
limit 100
Фрагмент | Интерпретация |
---|---|
город | город |
и | игнор |
адрес | адрес |
и | игнор |
фамилия клиентов | фамилия клиента |
для 100 | limit 100 |
первых | игнор |
прокатов за февраль 2006 | дата начала аренды - февраль 2006 года |
Пример №5.13
Пользователь> город и адрес и фамилия и идентификатор 100 первых клиентов аренда за январь 2006
Система v0.46> Вывести топ 100 записей "город", "адрес", "фамилия клиента", "идентификатор клиента" и "дата проката", с условием, что "дата начала аренды" от '2006-01-01 00:00:00' до '2006-01-31 23:59:59' и существует "прокат", с сортировкой по возрастанию даты проката.
select distinct ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
c.customer_id as "Идентификатор клиента",
re.rental_date as "Дата проката"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join CUSTOMER c on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
where re.rental_date between '2006-01-01 00:00:00' and '2006-01-31 23:59:59'
order by 5
limit 100
Фрагмент | Интерпретация |
---|---|
город | город |
и | игнор |
адрес | адрес |
и | игнор |
фамилия | фамилия клиента |
и | игнор |
идентификатор | идентификатор клиента |
100 | limit 100 |
первых клиентов | дата проката |
аренда | прокат |
за январь 2006 | дата начала аренды - январь 2006 года |
Пример №5.14
Пользователь> для 200 первых прокатов за февраль 2006 вывести город и адрес и фамилия и идентификатор клиента
Система v0.46> Вывести топ 200 записей "дата начала аренды", "фильм", "город", "адрес", "фамилия клиента" и "идентификатор клиента", с условием, что "дата начала аренды" от '2006-02-01 00:00:00' до '2006-02-28 23:59:59' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию даты начала аренды.
select re.rental_date as "Дата начала аренды",
f.title as "Фильм",
ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
c.customer_id as "Идентификатор клиента"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join FILM f on iv.film_id = f.film_id
join ADDRESS ad on c.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where re.rental_date between '2006-02-01 00:00:00' and '2006-02-28 23:59:59'
order by 1
limit 200
Фрагмент | Интерпретация |
---|---|
для 200 первых прокатов | limit 200 самых маленьких |
за февраль 2006 | дата начала аренды - февраль 2006 года |
вывести | игнор |
город | вывести город |
и | игнор |
адрес | вывести адрес |
и | игнор |
фамилия | вывести фамилия клиента |
и | игнор |
идентификатор клиента | вывести идентификатор клиента |
Пользователь> для 200 первых прокатов за февраль 2006 вывести город и адрес и фамилия и идентификатор клиента
Система v0.46> Вывести топ 200 записей "дата начала аренды", "фильм", "город", "адрес", "фамилия клиента" и "идентификатор клиента", с условием, что "дата начала аренды" от '2006-02-01 00:00:00' до '2006-02-28 23:59:59' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию даты начала аренды.
select re.rental_date as "Дата начала аренды",
f.title as "Фильм",
ci.city as "Город",
ad.address as "Адрес",
c.last_name as "Фамилия клиента",
c.customer_id as "Идентификатор клиента"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join FILM f on iv.film_id = f.film_id
join ADDRESS ad on c.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where re.rental_date between '2006-02-01 00:00:00' and '2006-02-28 23:59:59'
order by 1
limit 200
Фрагмент | Интерпретация |
---|---|
для 200 первых прокатов | limit 200 самых маленьких |
за февраль 2006 | дата начала аренды - февраль 2006 года |
вывести | игнор |
город | вывести город |
и | игнор |
адрес | вывести адрес |
и | игнор |
фамилия | вывести фамилия клиента |
и | игнор |
идентификатор клиента | вывести идентификатор клиента |
Пример №5.15
Пользователь> 10 самых редко арендуемых ужасов за последние полгода в 2006 году, которые выдавались в прокат на складе 'Сливовая (Молочник тер. СНТ), дом 166'
Система v0.46> Вывести топ 10 записей "фильм" и "популярность проката", с группировкой по "фильму", с условием, что "категория фильма" равно 'Ужасы' и "дата начала аренды" от '2006-07-01 00:00:00' до '2006-12-31 23:59:59' и "адрес" равно 'Сливовая (Молочник тер. СНТ), дом 166' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию популярности проката.
select f.title as "Фильм",
count(distinct re.rental_id) as "Популярность проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join ADDRESS ad on st.address_id = ad.address_id
left join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 11
and re.rental_date between '2006-07-01 00:00:00' and '2006-12-31 23:59:59'
and ad.address = 'Сливовая (Молочник тер. СНТ), дом 166'
group by f.film_id
order by 2
limit 10
Фрагмент | Интерпретация |
---|---|
10 самых редко арендуемых | limit 10 самых маленьких |
ужасов | идентификатор категории - равно Ужасы |
за последние полгода в 2006 году | дата начала аренды - с июля 2006 года по декабря 2006 года |
, | игнор |
которые выдавались в прокат | прокат |
на складе | склад |
' | игнор |
Сливовая (Молочник тер. СНТ), дом 166 | адрес - равно 'Сливовая (Молочник тер. СНТ), дом 166' |
' | игнор |
Пример №5.16
Пользователь> двести последних клиентов в июле 2021 года
Система v0.46> Вывести топ 200 записей "дата проката" и "клиент", с условием, что "дата начала аренды" от '2021-07-01 00:00:00' до '2021-07-31 23:59:59' и существует "прокат", с сортировкой по убыванию даты проката.
select re.rental_date as "Дата проката",
concat(c.first_name, ' ', c.last_name) as "Клиент"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
where re.rental_date between '2021-07-01 00:00:00' and '2021-07-31 23:59:59'
order by 1 desc nulls last
limit 200
Фрагмент | Интерпретация |
---|---|
двести последних клиентов | limit 200 самых больших |
в июле 2021 года | дата начала аренды - июль 2021 года |
Пример №5.17
Пользователь> сколько денег принесла сдача в аренду фильмов "корова" сгруппировать по городам и вывести первые 10 записей
Система v0.46> Вывести топ 10 записей "город" и "сумма платежей", с группировкой по "городу", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по убыванию суммы платежей.
select ci.city as "Город",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where f.title = 'Корова'
group by ci.city_id
order by 2 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
сколько денег | сумма платежей |
принесла | игнор |
сдача в аренду фильмов | прокат |
"корова" | название фильма - равно 'Корова' |
сгруппировать по городам | group by город |
и вывести | игнор |
первые 10 | limit 10 |
записей | игнор |
Пользователь> сколько денег принесла сдача в аренду фильмов "корова" сгруппировать по городам и вывести 10 первых города
Система v0.46> Вывести топ 10 записей "город" и "сумма платежей", с группировкой по "городу", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по убыванию суммы платежей.
select ci.city as "Город",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where f.title = 'Корова'
group by ci.city_id
order by 2 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
сколько денег | сумма платежей |
принесла | игнор |
сдача в аренду фильмов | прокат |
"корова" | название фильма - равно 'Корова' |
сгруппировать по городам | group by город |
и вывести | игнор |
10 первых города | limit 10 |
Пример №5.18
Пользователь> сколько денег принесла сдача в аренду фильмов "корова" сгруппировать по городам и вывести последние 10 записей
Система v0.46> Вывести топ 10 записей "город" и "сумма платежей", с группировкой по "городу", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию суммы платежей.
select ci.city as "Город",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where f.title = 'Корова'
group by ci.city_id
order by 2
limit 10
Фрагмент | Интерпретация |
---|---|
сколько денег | сумма платежей |
принесла | игнор |
сдача в аренду фильмов | прокат |
"корова" | название фильма - равно 'Корова' |
сгруппировать по городам | group by город |
и вывести | игнор |
последние 10 | limit 10 |
записей | игнор |
Пользователь> сколько денег принесла сдача в аренду фильмов "корова" сгруппировать по городам и вывести последних 10 городов
Система v0.46> Вывести топ 10 записей "город" и "сумма платежей", с группировкой по "городу", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по возрастанию суммы платежей.
select ci.city as "Город",
sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where f.title = 'Корова'
group by ci.city_id
order by 2
limit 10
Фрагмент | Интерпретация |
---|---|
сколько денег | сумма платежей |
принесла | игнор |
сдача в аренду фильмов | прокат |
"корова" | название фильма - равно 'Корова' |
сгруппировать по городам | group by город |
и вывести | игнор |
последних 10 городов | limit 10 |
Пример №5.19
Пользователь> первые 10 регионов кроме "Татарстан Респ" или "Московская обл" корова берется в аренду чаще всего
Система v0.46> Вывести топ 10 записей "район адреса" и "количество прокатов", с группировкой по "району адреса", с условием, что "район адреса" не равно и 'Татарстан Респ' и 'Московская обл' и "название фильма" равно 'Корова' и существует "фильм на складе" и "прокат", с сортировкой по убыванию количества прокатов.
select ad.district as "Район адреса",
count(distinct re.rental_id) as "Количество прокатов"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where ad.district not in ('Татарстан Респ', 'Московская обл')
and f.title = 'Корова'
group by 1
order by 2 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
первые 10 | limit 10 |
регионов | район адреса |
кроме | кроме |
"Татарстан Респ" или "Московская обл" | район адреса - не равно 'Татарстан Респ' или 'Московская обл' |
корова | название фильма - равно 'Корова' |
берется | прокат |
в аренду | count(прокат) |
чаще всего | having by: максимум |
Пользователь> в десяти каких регионах кроме "Татарстан Респ" или "Московская обл" корова берется в аренду чаще всего
Система v0.46> Вывести топ 10 записей "фильм" и "количество прокатов", с группировкой по "фильму", с условием, что "район адреса" не равно и 'Татарстан Респ' и 'Московская обл' и "название фильма" равно 'Корова' и существует "фильм на складе" и "прокат", с сортировкой по убыванию количества прокатов.
select f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from ADDRESS ad
left join STORE st on st.address_id = ad.address_id
left join INVENTORY iv on iv.store_id = st.store_id
left join FILM f on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where ad.district not in ('Татарстан Респ', 'Московская обл')
and f.title = 'Корова'
group by f.film_id
order by 2 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
в десяти каких регионах | limit 10 |
кроме | кроме |
"Татарстан Респ" или "Московская обл" | район адреса - не равно 'Татарстан Респ' или 'Московская обл' |
корова | название фильма - равно 'Корова' |
берется | прокат |
в аренду | count(прокат) |
чаще всего | having by: максимум |
Пример №5.20
Пользователь> город и адрес и идентификатор десяти клиентов которые последними вернули копию фильма "корова"
Система v0.46> Вывести топ 10 записей "город", "адрес", "идентификатор клиента", "клиент" и "дата возврата", с условием, что "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе", с сортировкой по убыванию даты возврата.
select distinct ci.city as "Город",
ad.address as "Адрес",
c.customer_id as "Идентификатор клиента",
concat(c.first_name, ' ', c.last_name) as "Клиент",
re.return_date as "Дата возврата"
from CITY ci
join ADDRESS ad on ad.city_id = ci.city_id
join CUSTOMER c on c.address_id = ad.address_id
join RENTAL re on re.customer_id = c.customer_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where f.title = 'Корова'
order by 5 desc nulls last
limit 10
Фрагмент | Интерпретация |
---|---|
город | город |
и | игнор |
адрес | адрес |
и | игнор |
идентификатор | идентификатор клиента |
десяти клиентов которые последними | limit 10 с max |
вернули | дата возврата |
копию фильма | фильм на складе |
"корова" | название фильма - равно 'Корова' |

Пример №6.1
Пользователь> сотрудники у которых нет начальников
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что "начальник сотрудника" пустой или "начальник сотрудника" равно 0, с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
where s.manager_id is null
or s.manager_id = 0
order by 1
Фрагмент | Интерпретация |
---|---|
сотрудники | сотрудник |
у которых нет начальников | начальник сотрудника пусто |

Пример №7.1
Пользователь> 12) Найдите сотрудников, не связанных с точками проката
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что не существуют "склады" с условием, что "работать сотрудника", с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
where not exists (select *
from STORE st
where s.store_id = st.store_id)
order by 1
Фрагмент | Интерпретация |
---|---|
12) Найдите | игнор |
сотрудников | сотрудник |
, | игнор |
не связанных с точками проката | сотрудник и склад - не связаны |
Пример №7.2
Пользователь> фильмы, взятые в прокат и которые не были оплачены покупателем
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "прокаты" с условием, что не существуют "платежи" и "клиенты", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and not exists
(select *
from PAYMENT p
join CUSTOMER c on p.customer_id = c.customer_id
where p.rental_id = re.rental_id
))
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, | игнор |
взятые в прокат | прокат |
и | игнор |
которые не были оплачены | отсутствует платеж |
покупателем | клиент |
Комментарий: Хотя таких фильмов в принципе нет, так как оплата есть всегда, но запрос строится правильный.
Пример №7.3
Пользователь> покажи покупателей, которые никогда не задерживались с возвращением арендованного фильма
Система v0.46> Вывести уникальные значения "клиент", с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" и не существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "задержка возвращения проката", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id)
and not exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and date_part('day', coalesce(re.return_date, current_timestamp) - re.rental_date) > f.rental_duration)
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
покупателей | клиент |
, | игнор |
которые никогда не задерживались с возвращением | не задержка возвращения проката |
арендованного фильма | прокат |
Пример №7.4
Пользователь> какие фильмы возвращали без задержки
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "прокаты" и не существуют "фильмы на складе" и "прокаты" с условием, что ??? не пустой и ??? больше , с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id)
and not exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > f.rental_duration)
order by 1
Фрагмент | Интерпретация |
---|---|
какие фильмы | фильм |
возвращали без задержки | возвращать вовремя проката |
Пример №7.5
Пользователь> пустые адреса у клиентов
Система v0.46> Вывести уникальные значения "клиент", с условием, что не существуют "адреса", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where not exists (select *
from ADDRESS ad
where c.address_id = ad.address_id)
order by 1
Фрагмент | Интерпретация |
---|---|
пустые адреса | адрес пусто |
у клиентов | клиент |
Пример №7.6
Пользователь> количество категорий имеющих фильмы
Система v0.46> Вывести записи "количество категорий", с условием, что существуют "фильмы".
select count(ca.category_id) as "Количество категорий"
from CATEGORY ca
where exists (select *
from FILM_CATEGORY fc
join FILM f on fc.film_id = f.film_id
where fc.category_id = ca.category_id)
Фрагмент | Интерпретация |
---|---|
количество категорий | count(категория) |
имеющих фильмы | фильм не пусто |
Пользователь> количество категорий с фильмами
Система v0.46> Вывести записи "количество категорий", с условием, что существуют "фильмы".
select count(ca.category_id) as "Количество категорий"
from CATEGORY ca
where exists (select *
from FILM_CATEGORY fc
join FILM f on fc.film_id = f.film_id
where fc.category_id = ca.category_id)
Фрагмент | Интерпретация |
---|---|
количество категорий | count(категория) |
с фильмами | фильм не пусто |
Пример №7.7
Пользователь> Вывести фильмы, которых нет на складе
Система v0.46> Вывести уникальные значения "фильм", с условием, что не существуют "фильмы на складе" и "склады", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where not exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
where iv.film_id = f.film_id)
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
фильмы | фильм |
, | игнор |
которых нет на складе | склад пусто |
Пользователь> Вывести фильмы, которые есть на складе
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе" и "склады", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
where iv.film_id = f.film_id)
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
фильмы | фильм |
, | игнор |
которые есть на складе | склад не пусто |
Пример №7.8
Пользователь> Вывести фильмы, имена всех актёров в которых начинаются на "а"
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" и не существуют "игры актёра в фильме" и "актеры" с условием, что "имя актера" не начинается с 'А', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id)
and not exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) not like 'А%')
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
фильмы | фильм |
, | игнор |
имена всех актёров в которых начинаются на "а" | имя актера - не like 'А%' |
Пользователь> Вывести фильмы и фио игравших в фильмы актёров, имена всех актёров в которых начинаются на "а"
Система v0.46> Вывести уникальные значения "фильм" и "фио актера", с условием, что существуют "актеры" и не существуют "актеры" с условием, что "имя актера" не начинается с 'А' и существует "игра актёра в фильме", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
concat(a.first_name, ' ', a.last_name) as "Фио актера"
from FILM f
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where exists (select *
from ACTOR a
where fa.actor_id = a.actor_id)
and not exists (select *
from ACTOR a
where fa.actor_id = a.actor_id
and upper(a.first_name) not like 'А%')
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
фильмы | фильм |
и | игнор |
фио | фио актера |
игравших | игра актёра в фильме |
в фильмы | фильм |
актёров | актер |
, | игнор |
имена всех актёров в которых начинаются на "а" | имя актера - не like 'А%' |
Пример №7.9
Пользователь> ФИО всех покупателей не вернувших фильм на сегодня
Система v0.46> Вывести уникальные значения "фио клиента", с условием, что существуют "прокаты" с условием, что "незавершенная аренда проката" и "дата начала аренды" от '2025-06-20 00:00:00' до '2025-06-20 23:59:59', с сортировкой по возрастанию фио клиента. Возможно, что дата 'на сегодня' здесь лишняя: 'на сегодня'. Уверенность в результате - 90%.
select distinct concat(c.first_name, ' ', c.last_name) as "Фио клиента"
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id
and re.return_date is null
and re.rental_date between '2025-06-20 00:00:00' and '2025-06-20 23:59:59')
order by 1
Фрагмент | Интерпретация |
---|---|
ФИО всех покупателей | фио клиента |
не вернувших фильм | незавершенная аренда проката |
на сегодня | возможно, что дата 'на сегодня' здесь лишняя |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select distinct concat(c.first_name, ' ', c.last_name) as "Фио клиента" from CUSTOMER c where exists (select * from RENTAL re where re.customer_id = c.customer_id and re.return_date is null and re.rental_date between '2006-02-04 00:00:00' and '2006-02-04 23:59:59') order by 1 | select distinct concat(c.first_name, ' ', c.last_name) as "Фио клиента" from CUSTOMER c where exists (select * from RENTAL re where re.customer_id = c.customer_id and re.return_date is null and re.rental_date between '2025-06-20 00:00:00' and '2025-06-20 23:59:59') order by 1 |
Пример №7.10
Пользователь> Какие фильмы взятые в прокат со стоимостью от 0 до 145 не были возвращены в период с января 2000 по декабрь 2015 года
Система v0.46> Вывести уникальные значения "фильм", с условием, что "стоимость фильма" от 0 до 145 и существуют "фильмы на складе" и "прокаты" с условием, что "дата возврата" не от '2000-01-01 00:00:00' до '2015-12-31 23:59:59', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where f.rental_rate between 0 and 145
and exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.return_date not between '2000-01-01 00:00:00' and '2015-12-31 23:59:59')
order by 1
Фрагмент | Интерпретация |
---|---|
Какие фильмы | фильм |
взятые в прокат | прокат |
со стоимостью | стоимость фильма - [0 .. 145] |
от 0 до 145 | игнор |
не были возвращены в период с января 2000 по декабрь 2015 года | дата возврата - не с января 2000 года по декабря 2015 года |
Пример №7.11
Пользователь> актеры не снявшиеся ни в одном фильме
Система v0.46> Вывести уникальные значения "актер", с условием, что не существуют "игры актёра в фильме" и "фильмы", с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
where not exists (select *
from FILM_ACTOR fa
join FILM f on fa.film_id = f.film_id
where fa.actor_id = a.actor_id)
order by 1
Фрагмент | Интерпретация |
---|---|
актеры | актер |
не снявшиеся ни в одном фильме | не игра актёра в фильме (фильм) |
Пример №7.12
Пользователь> клиенты не сделавшие ни одной покупки
Система v0.46> Вывести уникальные значения "клиент", с условием, что не существуют "платежи", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where not exists (select *
from PAYMENT p
where p.customer_id = c.customer_id)
order by 1
Фрагмент | Интерпретация |
---|---|
клиенты | клиент |
не сделавшие ни одной покупки | платеж пусто |
Пример №7.13
Пользователь> Покажи всех актеров, снимавшихся в фильмах последние пять лет
Система v0.46> Вывести уникальные значения "актер", с условием, что существуют "игры актёра в фильме" и "фильмы" с условием, что "год выхода фильма" от 2020 до 2025, с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
where exists (select *
from FILM_ACTOR fa
join FILM f on fa.film_id = f.film_id
where fa.actor_id = a.actor_id
and f.release_year between 2020 and 2025)
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи всех | игнор |
актеров | актер |
, | игнор |
снимавшихся | игра актёра в фильме |
в фильмах | фильм |
последние пять лет | год выхода фильма - с 5 лет назад по текущий год (2020.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select distinct concat(a.first_name, ' ', a.last_name) as "Актер" from ACTOR a where exists (select * from FILM_ACTOR fa join FILM f on fa.film_id = f.film_id where fa.actor_id = a.actor_id and f.release_year between 2001 and 2006) order by 1 | select distinct concat(a.first_name, ' ', a.last_name) as "Актер" from ACTOR a where exists (select * from FILM_ACTOR fa join FILM f on fa.film_id = f.film_id where fa.actor_id = a.actor_id and f.release_year between 2020 and 2025) order by 1 |
Пример №7.14
Пользователь> В каких городах есть фильмы на русском языке с актёром том круз
Система v0.46> Вывести уникальные значения "город", с условием, что существуют "адреса", "склады", "фильмы на складе", "фильмы", "игры актёра в фильме" и "актеры" с условием, что "язык озвучки" равно 'русский' и имя актера (без учета регистра) равно 'ТОМ' и фамилия актера (без учета регистра) равно 'КРУЗ', с сортировкой по возрастанию города.
select distinct ci.city as "Город"
from CITY ci
where exists (select *
from ADDRESS ad
join STORE st on st.address_id = ad.address_id
join INVENTORY iv on iv.store_id = st.store_id
join FILM f on iv.film_id = f.film_id
join LANGUAGE la on f.language_id = la.language_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where ad.city_id = ci.city_id
and la.language_id = 1
and upper(a.first_name) = 'ТОМ'
and upper(a.last_name) = 'КРУЗ')
order by 1
Фрагмент | Интерпретация |
---|---|
В каких городах | город |
есть фильмы | фильм не пусто |
на русском | идентификатор языка озвучки - равно русский |
языке | язык озвучки |
с актёром | актер не пусто |
том | имя актера равно 'ТОМ' |
круз | фамилия актера равно 'КРУЗ' |
Пример №7.15
Пользователь> Вывести всех актёров которые снимались только в фильмах ужасов
Система v0.46> Вывести уникальные значения "актер", с условием, что существуют "игры актёра в фильме" с условием, что существуют "фильмы" и не существуют "фильмы" с условием, что "категория фильма" не равно 'Ужасы', с сортировкой по возрастанию актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
where exists (select *
from FILM_ACTOR fa
where fa.actor_id = a.actor_id
and exists
(select *
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where fa.film_id = f.film_id
)
and not exists
(select *
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where fa.film_id = f.film_id
and ca.category_id != 11
))
order by 1
Фрагмент | Интерпретация |
---|---|
Вывести всех | игнор |
актёров | актер |
которые снимались | игра актёра в фильме |
только в фильмах | исключительно |
ужасов | идентификатор категории - не равно Ужасы |
Пример №7.16
Пользователь> сколько работников не работают на складе
Система v0.46> Вывести записи "количество сотрудников", с условием, что не существуют "склады" с условием, что "работать сотрудника".
select count(s.staff_id) as "Количество сотрудников"
from STAFF s
where not exists (select *
from STORE st
where s.store_id = st.store_id)
Фрагмент | Интерпретация |
---|---|
сколько работников | count(сотрудник) |
не работают | сотрудник и склад - не связь (s.store_id = st.store_id) |
на складе | склад |
Пользователь> сколько сотрудников не привязаны ко складу
Система v0.46> Вывести записи "количество сотрудников", с условием, что не существуют "склады" с условием, что "работать сотрудника".
select count(s.staff_id) as "Количество сотрудников"
from STAFF s
where not exists (select *
from STORE st
where s.store_id = st.store_id)
Фрагмент | Интерпретация |
---|---|
сколько сотрудников | count(сотрудник) |
не привязаны ко складу | сотрудник и склад - не связаны |
Пример №7.17
Пользователь> Какие фильмы взятые в прокат в период с января 2000 по декабрь 2015 года со стоимостью от 0 до 145 не были возвращены
Система v0.46> Вывести уникальные значения "фильм", с условием, что "стоимость фильма" от 0 до 145 и существуют "фильмы на складе" и "прокаты" с условием, что "дата начала аренды" от '2000-01-01 00:00:00' до '2015-12-31 23:59:59' и не существуют "фильмы на складе" и "прокаты" с условием, что "дата начала аренды" от '2000-01-01 00:00:00' до '2015-12-31 23:59:59' и "вернуть фильм проката", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where f.rental_rate between 0 and 145
and exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.rental_date between '2000-01-01 00:00:00' and '2015-12-31 23:59:59')
and not exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
where iv.film_id = f.film_id
and re.rental_date between '2000-01-01 00:00:00' and '2015-12-31 23:59:59'
and re.return_date is not null)
order by 1
Фрагмент | Интерпретация |
---|---|
Какие фильмы | фильм |
взятые в прокат | прокат |
в период с января 2000 по декабрь 2015 года | дата начала аренды - с января 2000 года по декабря 2015 года |
со стоимостью | стоимость фильма - [0 .. 145] |
от 0 до 145 | игнор |
не были возвращены | не вернуть фильм проката |
Пример №7.18
Пользователь> покажи имена покупателей, которые никогда не брали фильма дольше, чем на неделю
Система v0.46> Вывести уникальные значения "имя клиента", с условием, что существуют "прокаты" с условием, что "аренда завершена проката" и не существуют "прокаты" с условием, что "аренда завершена проката" и "количество дней проката" больше 7, с сортировкой по возрастанию имени клиента.
select distinct c.first_name as "Имя клиента"
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id
and re.return_date is not null)
and not exists (select *
from RENTAL re
where re.customer_id = c.customer_id
and re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > 7)
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
имена покупателей | имя клиента |
, | игнор |
которые никогда не брали фильма | не прокат |
дольше, чем на неделю | количество дней проката ]1 .. [ нед |
Пример №7.19
Пользователь> В скольки фильмах играли вместе Александр Калягин и Олег Видов
Система v0.46> Вывести записи "количество фильмов", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра и буквы Ё) равно 'АЛЕКСАНДР' и "фамилия актера" равно 'Калягин' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра и буквы Ё) равно 'ОЛЕГ' и "фамилия актера" равно 'Видов'.
select count(f.film_id) as "Количество фильмов"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and replace(upper(a.first_name), 'Ё', 'Е') = 'АЛЕКСАНДР'
and a.last_name = 'Калягин')
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and replace(upper(a.first_name), 'Ё', 'Е') = 'ОЛЕГ'
and a.last_name = 'Видов')
Фрагмент | Интерпретация |
---|---|
В скольки фильмах | count(фильм) |
играли | игра актёра в фильме |
вместе | вместе |
Александр | имя актера - равно 'АЛЕКСАНДР' |
Калягин | фамилия актера - равно 'Калягин' |
и | игнор |
Олег | имя актера - равно 'ОЛЕГ' |
Видов | фамилия актера - равно 'Видов' |
Пример №7.20
Пользователь> сколько сотрудников выдавали фильмы
Система v0.46> Вывести записи "количество сотрудников", с условием, что существуют "прокаты".
select count(s.staff_id) as "Количество сотрудников"
from STAFF s
where exists (select *
from RENTAL re
where re.staff_id = s.staff_id)
Фрагмент | Интерпретация |
---|---|
сколько сотрудников | count(сотрудник) |
выдавали фильмы | прокат |
Пример №7.21
Пользователь> вывести склады, с которых не брали фильмы клиенты с именем вася
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "фильмы на складе", "прокаты" и "клиенты" и не существуют "фильмы на складе", "прокаты" и "клиенты" с условием, что имя клиента (без учета регистра) равно 'ВАСЯ', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where iv.store_id = st.store_id)
and not exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where iv.store_id = st.store_id
and upper(c.first_name) = 'ВАСЯ')
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
склады | склад |
, | игнор |
с которых не брали фильмы | не прокат |
клиенты | клиент |
с именем вася | имя клиента - равно 'ВАСЯ' |
Пример №7.22
Пользователь> вывести склады, фильмы с которых не брали фильмы клиенты с именем вася
Система v0.46> Вывести уникальные значения "склад", с условием, что существуют "фильмы на складе", "прокаты", "фильмы" и "клиенты" и не существуют "фильмы на складе", "прокаты", "фильмы" и "клиенты" с условием, что имя клиента (без учета регистра) равно 'ВАСЯ', с сортировкой по возрастанию склада.
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад"
from STORE st
where exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join CUSTOMER c on re.customer_id = c.customer_id
where iv.store_id = st.store_id)
and not exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join CUSTOMER c on re.customer_id = c.customer_id
where iv.store_id = st.store_id
and upper(c.first_name) = 'ВАСЯ')
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
склады | склад |
, | игнор |
фильмы | фильм |
с которых не брали фильмы | не прокат |
клиенты | клиент |
с именем вася | имя клиента - равно 'ВАСЯ' |
Пример №7.23
Пользователь> Фильм с удаленными сценами который брали клиенты Ян Спаваков и Михаил Гиллиер
Система v0.46> Вывести уникальные значения "фильм", с условием, что "удаленные сцены фильма" и существуют "фильмы на складе", "прокаты" и "клиенты" с условием, что имя клиента (без учета регистра) равно 'ЯН' и фамилия клиента (без учета регистра) равно 'СПАВАКОВ' или имя клиента (без учета регистра) равно 'МИХАИЛ' и фамилия клиента (без учета регистра и буквы Ё) равно 'ГИЛЛИЕР', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where array_to_string(f.special_features, ',') like '%УдаленныеСцены%'
and exists (select *
from INVENTORY iv
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where iv.film_id = f.film_id
and ((upper(c.first_name) = 'ЯН' and upper(c.last_name) = 'СПАВАКОВ') or (upper(c.first_name) = 'МИХАИЛ' and replace(upper(c.last_name), 'Ё', 'Е') = 'ГИЛЛИЕР')))
order by 1
Фрагмент | Интерпретация |
---|---|
Фильм | фильм |
с удаленными сценами | удаленные сцены фильма |
который брали | прокат |
клиенты | клиент |
Ян | имя клиента равно 'ЯН' |
Спаваков | фамилия клиента равно 'СПАВАКОВ' |
и | игнор |
Михаил | имя клиента равно 'МИХАИЛ' |
Гиллиер | фамилия клиента равно 'ГИЛЛИЕР' |
Пример №7.24
Пользователь> Фильмы с категориями фантастика И мюзикл одновременно
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "категории" с условием, что "категория фильма" равно 'Фантастика' и существуют "категории" с условием, что "категория фильма" равно 'Музыкальный', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 14)
and exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 12)
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
с категориями | категория не пусто |
фантастика | идентификатор категории - равно Фантастика |
И | игнор |
мюзикл | идентификатор категории - равно Музыкальный |
одновременно | вместе |
Пользователь> Фильмы с категориями и фантастика, и мюзикл
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "категории" с условием, что "категория фильма" равно 'Фантастика' и существуют "категории" с условием, что "категория фильма" равно 'Музыкальный', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 14)
and exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 12)
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
с категориями | категория не пусто |
и | игнор |
фантастика | идентификатор категории - равно Фантастика |
, и | игнор |
мюзикл | идентификатор категории - равно Музыкальный |
Пример №7.25
Пользователь> кто не продал ни одного фильма с именем актёра ничинающимся с буквы Р
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что существуют "прокаты", "фильмы на складе", "фильмы", "игры актёра в фильме" и "актеры" и не существуют "прокаты", "фильмы на складе", "фильмы", "игры актёра в фильме" и "актеры" с условием, что "имя актера" начинается с 'Р', с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where re.staff_id = s.staff_id)
and not exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
where re.staff_id = s.staff_id
and upper(a.first_name) like 'Р%')
order by 1
Фрагмент | Интерпретация |
---|---|
кто | сотрудник |
не продал ни одного фильма | не прокат (фильм) |
с именем актёра ничинающимся с буквы Р | имя актера - like 'Р%' |
Пример №7.26
Пользователь> названия фильмов которые НЕ доступны для аренды
Система v0.46> Вывести уникальные значения "название фильма", с условием, что не "доступный для аренды фильма", с сортировкой по возрастанию названия фильма.
select distinct f.title as "Название фильма"
from FILM f
where not exists (select *
from INVENTORY iv
where iv.film_id = f.film_id
and not exists
(select *
from RENTAL ren
where ren.inventory_id = iv.inventory_id
and ren.return_date is null
))
order by 1
Фрагмент | Интерпретация |
---|---|
названия фильмов | название фильма |
которые НЕ доступны для аренды | не доступный для аренды фильма |
Пример №7.27
Пользователь> сколько клиентов никогда не брали корову
Система v0.46> Вывести записи "количество клиентов", с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" и не существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "название фильма" равно 'Корова'.
select count(c.customer_id) as "Количество клиентов"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id)
and not exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and f.title = 'Корова')
Фрагмент | Интерпретация |
---|---|
сколько клиентов | count(клиент) |
никогда | игнор |
не брали | не прокат |
корову | название фильма - равно 'Корова' |
Пример №7.28
Пользователь> в каких фильмах играли "Ирина Муравьёва", "Екатерина Васильева", "Любовь Полищук"
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ИРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'МУРАВЬЕВА' или имя актера (без учета регистра и буквы Ё) равно 'ЕКАТЕРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'ВАСИЛЬЕВА' или имя актера (без учета регистра) равно 'ЛЮБОВЬ' и фамилия актера (без учета регистра) равно 'ПОЛИЩУК', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and ((upper(a.first_name) = 'ИРИНА' and replace(upper(a.last_name), 'Ё', 'Е') = 'МУРАВЬЕВА') or (replace(upper(a.first_name), 'Ё', 'Е') = 'ЕКАТЕРИНА' and replace(upper(a.last_name), 'Ё', 'Е') = 'ВАСИЛЬЕВА') or (upper(a.first_name) = 'ЛЮБОВЬ' and upper(a.last_name) = 'ПОЛИЩУК')))
order by 1
Фрагмент | Интерпретация |
---|---|
в каких фильмах | фильм |
играли | игра актёра в фильме |
"Ирина | имя актера равно 'ИРИНА' |
Муравьёва" | фамилия актера равно 'МУРАВЬЕВА' |
, | игнор |
"Екатерина | имя актера равно 'ЕКАТЕРИНА' |
Васильева" | фамилия актера равно 'ВАСИЛЬЕВА' |
, | игнор |
"Любовь | имя актера равно 'ЛЮБОВЬ' |
Полищук" | фамилия актера равно 'ПОЛИЩУК' |
Пример №7.29
Пользователь> в каких фильмах играли и "Ирина Муравьёва", и "Екатерина Васильева", и "Любовь Полищук"
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ИРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'МУРАВЬЕВА' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра и буквы Ё) равно 'ЕКАТЕРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'ВАСИЛЬЕВА' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ЛЮБОВЬ' и фамилия актера (без учета регистра) равно 'ПОЛИЩУК', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'ИРИНА'
and replace(upper(a.last_name), 'Ё', 'Е') = 'МУРАВЬЕВА')
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and replace(upper(a.first_name), 'Ё', 'Е') = 'ЕКАТЕРИНА'
and replace(upper(a.last_name), 'Ё', 'Е') = 'ВАСИЛЬЕВА')
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'ЛЮБОВЬ'
and upper(a.last_name) = 'ПОЛИЩУК')
order by 1
Фрагмент | Интерпретация |
---|---|
в каких фильмах | фильм |
играли | игра актёра в фильме |
и | игнор |
"Ирина | имя актера равно 'ИРИНА' |
Муравьёва" | фамилия актера равно 'МУРАВЬЕВА' |
, и | игнор |
"Екатерина | имя актера равно 'ЕКАТЕРИНА' |
Васильева" | фамилия актера равно 'ВАСИЛЬЕВА' |
, и | игнор |
"Любовь | имя актера равно 'ЛЮБОВЬ' |
Полищук" | фамилия актера равно 'ПОЛИЩУК' |
Пользователь> в каких фильмах одновременно играли "Ирина Муравьёва" И "Екатерина Васильева" И "Любовь Полищук"
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ИРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'МУРАВЬЕВА' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра и буквы Ё) равно 'ЕКАТЕРИНА' и фамилия актера (без учета регистра и буквы Ё) равно 'ВАСИЛЬЕВА' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'ЛЮБОВЬ' и фамилия актера (без учета регистра) равно 'ПОЛИЩУК', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'ИРИНА'
and replace(upper(a.last_name), 'Ё', 'Е') = 'МУРАВЬЕВА')
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and replace(upper(a.first_name), 'Ё', 'Е') = 'ЕКАТЕРИНА'
and replace(upper(a.last_name), 'Ё', 'Е') = 'ВАСИЛЬЕВА')
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'ЛЮБОВЬ'
and upper(a.last_name) = 'ПОЛИЩУК')
order by 1
Фрагмент | Интерпретация |
---|---|
в каких фильмах | фильм |
одновременно | вместе |
играли | игра актёра в фильме |
"Ирина | имя актера равно 'ИРИНА' |
Муравьёва" | фамилия актера равно 'МУРАВЬЕВА' |
И | игнор |
"Екатерина | имя актера равно 'ЕКАТЕРИНА' |
Васильева" | фамилия актера равно 'ВАСИЛЬЕВА' |
И | игнор |
"Любовь | имя актера равно 'ЛЮБОВЬ' |
Полищук" | фамилия актера равно 'ПОЛИЩУК' |
Пример №7.30
Пользователь> полные имена клиентов которые никогда не брали фильм "корова", но арендовали фильм "воин"
Система v0.46> Вывести уникальные значения "фио клиента", с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "название фильма" равно 'Воин' и не существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "название фильма" равно 'Корова', с сортировкой по возрастанию фио клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Фио клиента"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and f.title = 'Воин')
and not exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and f.title = 'Корова')
order by 1
Фрагмент | Интерпретация |
---|---|
полные имена клиентов | фио клиента |
которые никогда не брали фильм | не прокат |
"корова" | название фильма - равно 'Корова' |
, но | игнор |
арендовали фильм | прокат |
"воин" | название фильма - равно 'Воин' |
Пример №7.31
Пользователь> кто из клиентов арендовал корову и дата возврата
Система v0.46> Вывести поля "клиент" и "дата окончания аренды", с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "название фильма" равно 'Корова', с сортировкой по возрастанию клиента.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
(select re.return_date
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and f.title = 'Корова'
limit 1) as "Дата окончания аренды"
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.customer_id = c.customer_id
and f.title = 'Корова')
order by 1
Фрагмент | Интерпретация |
---|---|
кто из клиентов | клиент |
арендовал | прокат |
корову | название фильма - равно 'Корова' |
и | игнор |
дата возврата | дата окончания аренды |
Пример №7.32
Пользователь> идентификатор копии фильма которую не вернули из аренды, дата начала аренды и текущая дата
Система v0.46> Вывести поля "идентификатор фильма на складе", "дата начала аренды" и "текущая дата-время", с условием, что существуют "прокаты" с условием, что "незавершенная аренда проката" и существует "фильм на складе", с сортировкой по возрастанию идентификатора фильма на складе.
select iv.inventory_id as "Идентификатор фильма на складе",
(select re.rental_date
from RENTAL re
where re.inventory_id = iv.inventory_id
and re.return_date is null
limit 1) as "Дата начала аренды",
current_timestamp as "Текущая дата-время"
from INVENTORY iv
where exists (select *
from RENTAL re
where re.inventory_id = iv.inventory_id
and re.return_date is null)
order by 1
Фрагмент | Интерпретация |
---|---|
идентификатор копии фильма | идентификатор фильма на складе |
которую не вернули | незавершенная аренда проката |
из аренды | прокат |
, | игнор |
дата начала аренды | дата начала аренды |
и | игнор |
текущая дата | текущая дата-время |
Пример №7.33
Пользователь> фильмы, которые есть на складе и в москве, и в казани
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе", "склады" и "адреса" с условием, что "наименование города" равно 'Москва' и существуют "фильмы на складе", "склады" и "адреса" с условием, что "наименование города" равно 'Казань', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and ci.city = 'Москва')
and exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and ci.city = 'Казань')
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, | игнор |
которые есть на складе | склад не пусто |
и | игнор |
в москве, и в казани | наименование города - равно 'Москва' и 'Казань' |
Пользователь> фильмы, которые есть на складе в москве и в казани
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе", "склады" и "адреса" с условием, что "наименование города" равно 'Москва' и существуют "фильмы на складе", "склады" и "адреса" с условием, что "наименование города" равно 'Казань', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and ci.city = 'Москва')
and exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and ci.city = 'Казань')
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, | игнор |
которые есть на складе | склад не пусто |
в москве и в казани | наименование города - равно 'Москва' и 'Казань' |
Пример №7.34
Пользователь> фильмы, которые есть только на складе в москве
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе", "склады" и "адреса" и не существуют "фильмы на складе", "склады" и "адреса" с условием, что "наименование города" не равно 'Москва', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id)
and not exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and ci.city != 'Москва')
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, которые есть | игнор |
только | исключительно |
на складе | склад |
в москве | наименование города - не равно 'Москва' |
Пример №7.35
Пользователь> фильмы, которые есть в москве но которых нет в казани
Система v0.46> Вывести уникальные значения "фильм", с условием, что существуют "фильмы на складе", "склады" и "адреса" с условием, что наименование города (без учета регистра) равно 'МОСКВА' и не существуют "фильмы на складе", "склады" и "адреса" с условием, что наименование города (без учета регистра) равно 'КАЗАНЬ', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
where exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and upper(ci.city) = 'МОСКВА')
and not exists (select *
from INVENTORY iv
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where iv.film_id = f.film_id
and upper(ci.city) = 'КАЗАНЬ')
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
, | игнор |
которые есть в москве | наименование города равно Москва |
но | игнор |
которых нет в казани | отсутствует наименование города равно Казань |

Пример №8.1
Пользователь> список актеров пяти самых популярных фильмов
Система v0.46> Вывести уникальные значения "актер", с условием, что существует "игра актёра в фильме" и "фильмы", "фильмы на складе" и "прокаты", с группировкой по "фильму".
select distinct concat(a.first_name, ' ', a.last_name) as "Актер"
from ACTOR a
join FILM_ACTOR fa on fa.actor_id = a.actor_id
join (
select f.film_id as tmpid,
count(distinct re.rental_id) as "Популярность проката"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
group by f.film_id
order by 2 desc nulls last
limit 5
) tmpfrom on true
where fa.film_id = tmpfrom.tmpid
Фрагмент | Интерпретация |
---|---|
список | игнор |
актеров | актер |
пяти самых популярных фильмов | limit 5 самых больших |
Пример №8.2
Пользователь> количество фильмов в названии которых 2 раза встречается слово "кошка", и которые были взяты в прокат более 5 раз
Система v0.46> Вывести "количество разных фильмов", с условием, что "фильмы", "фильмы на складе" и "прокаты", с группировкой по "фильму" с условием, что "название фильма" содержит подстроку 'КОШКА' 2 раза, с группировочным условием, что количество разных прокатов больше 5.
select count(distinct tmpsel.tmpval) as "Количество разных фильмов" from (
select f.film_id as tmpval,
count(distinct re.rental_id) as "Количество прокатов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join RENTAL re on re.inventory_id = iv.inventory_id
where upper(f.title) like '%КОШКА%КОШКА%'
group by f.film_id
having count(distinct re.rental_id) > 5
) tmpsel
Фрагмент | Интерпретация |
---|---|
количество фильмов | count(фильм) |
в названии которых 2 раза встречается слово "кошка" | название фильма - содержит подстроку 'КОШКА' |
, и | игнор |
которые были взяты в прокат | прокат |
более 5 раз | count(прокат) having by ]5 .. [ раз |
Пример №8.3
Пользователь> число покупателей, взявших один и тот же фильм несколько раз
Система v0.46> Вывести "количество разных клиентов", с условием, что "клиенты", "прокаты", "фильмы на складе" и "фильмы", с группировкой по "клиенту" и "фильму", с группировочным условием, что количество разных прокатов больше 1.
select count(distinct tmpsel.tmpval) as "Количество разных клиентов" from (
select c.customer_id as tmpval,
f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
group by c.customer_id, f.film_id
having count(distinct re.rental_id) > 1
) tmpsel
Фрагмент | Интерпретация |
---|---|
число покупателей | count(клиент) |
, | игнор |
взявших | прокат |
один и тот же | один и тот же фильм |
фильм | фильм |
несколько раз | count(прокат) having by ]1 .. [ |
Пользователь> покупателей, взявших один и тот же фильм несколько раз
Система v0.46> Вывести поля "клиент", "фильм" и "количество прокатов", с группировкой по "клиенту" и "фильму", с условием, что существует "прокат" и "фильм на складе", с группировочным условием, что количество разных прокатов больше 1, с сортировкой по возрастанию клиента и по возрастанию фильма.
select concat(c.first_name, ' ', c.last_name) as "Клиент",
f.title as "Фильм",
count(distinct re.rental_id) as "Количество прокатов"
from CUSTOMER c
left join RENTAL re on re.customer_id = c.customer_id
left join INVENTORY iv on re.inventory_id = iv.inventory_id
left join FILM f on iv.film_id = f.film_id
group by c.customer_id, f.film_id
having count(distinct re.rental_id) > 1
order by 1, 2
Фрагмент | Интерпретация |
---|---|
покупателей | клиент |
, | игнор |
взявших | прокат |
один и тот же | один и тот же фильм |
фильм | фильм |
несколько раз | count(прокат) having by ]1 .. [ |
Пример №8.4
Пользователь> цена аренды самого популярного фильма
Система v0.46> Вывести поля "стоимость фильма" и "фильм", с условием, что "прокаты", "фильмы на складе" и "фильмы", с группировкой по "фильму", с группировочным условием, что популярность проката равно максимальному значению, с сортировкой по возрастанию стоимости фильма.
select f.rental_rate as "Стоимость фильма",
f.title as "Фильм"
from FILM f
join (
select f.film_id as tmpid
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select f.film_id as "Фильм",
count(distinct re.rental_id) as tmpval
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by f.film_id
) tmpsel)
) tmptab on f.film_id = tmptab.tmpid
order by 1
Фрагмент | Интерпретация |
---|---|
цена аренды | стоимость фильма |
самого популярного | популярность проката = Max |
фильма | игнор |
Пример №8.5
Пользователь> покажи фильмы самой популярной категории
Система v0.46> Вывести уникальные значения "фильм" и "категория", с условием, что "прокаты", "фильмы на складе" и "фильмы", с группировкой по "категории", с группировочным условием, что популярность проката равно максимальному значению, с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
ca.name as "Категория"
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
join (
select ca.category_id as tmpid
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id
having count(distinct re.rental_id) = (select max(tmpval) from (
select ca.category_id as "Идентификатор категории",
count(distinct re.rental_id) as tmpval
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
left join FILM_CATEGORY fc on fc.film_id = f.film_id
left join CATEGORY ca on fc.category_id = ca.category_id
group by ca.category_id
) tmpsel)
) tmptab on ca.category_id = tmptab.tmpid
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
фильмы | фильм |
самой популярной | count(re.rental_id) having: равно максимуму |
категории | категория |
Пример №8.6
Пользователь> какие фильмы сейчас на руках у людей, которые никогда не брали ужастики
Система v0.46> Вывести уникальные значения "фильм", с условием, что "незавершенная аренда проката" и "дата начала аренды" меньше или равно '2025-06-20 14:16:23' и дата окончания аренды больше или равно '2025-06-20 14:16:23' и существует "фильм на складе" и "прокат" и "клиенты" с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" и не существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "категория фильма" равно 'Ужасы', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join (
select distinct c.customer_id as tmpid
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where re.customer_id = c.customer_id)
and not exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where re.customer_id = c.customer_id
and ca.category_id = 11)
) tmptab on c.customer_id = tmptab.tmpid
where re.return_date is null
and re.rental_date <= '2025-06-20 14:16:23'
and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:23'
order by 1
Фрагмент | Интерпретация |
---|---|
какие фильмы | фильм |
сейчас | сейчас (2025.06.20 14:16 отн. 2025.06.20 14:16) между дата начала аренды и дата окончания аренды |
на руках | незавершенная аренда проката |
у людей | клиент |
, | игнор |
которые никогда не брали | не прокат |
ужастики | идентификатор категории - равно Ужасы |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select distinct f.title as "Фильм" from FILM f join INVENTORY iv on iv.film_id = f.film_id join RENTAL re on re.inventory_id = iv.inventory_id join CUSTOMER c on re.customer_id = c.customer_id join (select distinct c.customer_id as tmpid from CUSTOMER c where exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id) and not exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id and ca.category_id = 11)) tmptab on c.customer_id = tmptab.tmpid where re.return_date is null and re.rental_date <= '2006-02-04 10:30:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-04 10:30:00' order by 1 | select distinct f.title as "Фильм" from FILM f join INVENTORY iv on iv.film_id = f.film_id join RENTAL re on re.inventory_id = iv.inventory_id join CUSTOMER c on re.customer_id = c.customer_id join (select distinct c.customer_id as tmpid from CUSTOMER c where exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id) and not exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id and ca.category_id = 11)) tmptab on c.customer_id = tmptab.tmpid where re.return_date is null and re.rental_date <= '2025-06-20 14:16:23' and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:23' order by 1 |
Пример №8.7
Пользователь> какие фильмы сейчас на руках у людей, которые когда-нибудь брали ужастики
Система v0.46> Вывести уникальные значения "фильм", с условием, что "незавершенная аренда проката" и "дата начала аренды" меньше или равно '2025-06-20 14:16:23' и дата окончания аренды больше или равно '2025-06-20 14:16:23' и существует "фильм на складе" и "прокат" и "клиенты" с условием, что существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что "категория фильма" равно 'Ужасы', с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
join (
select distinct c.customer_id as tmpid
from CUSTOMER c
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where re.customer_id = c.customer_id
and ca.category_id = 11)
) tmptab on c.customer_id = tmptab.tmpid
where re.return_date is null
and re.rental_date <= '2025-06-20 14:16:23'
and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:23'
order by 1
Фрагмент | Интерпретация |
---|---|
какие фильмы | фильм |
сейчас | сейчас (2025.06.20 14:16 отн. 2025.06.20 14:16) между дата начала аренды и дата окончания аренды |
на руках | незавершенная аренда проката |
у людей | клиент |
, | игнор |
которые когда-нибудь брали | прокат |
ужастики | идентификатор категории - равно Ужасы |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select distinct f.title as "Фильм" from FILM f join INVENTORY iv on iv.film_id = f.film_id join RENTAL re on re.inventory_id = iv.inventory_id join CUSTOMER c on re.customer_id = c.customer_id join (select distinct c.customer_id as tmpid from CUSTOMER c where exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id and ca.category_id = 11)) tmptab on c.customer_id = tmptab.tmpid where re.return_date is null and re.rental_date <= '2006-02-04 10:30:00' and coalesce(re.return_date, current_timestamp) >= '2006-02-04 10:30:00' order by 1 | select distinct f.title as "Фильм" from FILM f join INVENTORY iv on iv.film_id = f.film_id join RENTAL re on re.inventory_id = iv.inventory_id join CUSTOMER c on re.customer_id = c.customer_id join (select distinct c.customer_id as tmpid from CUSTOMER c where exists (select * from RENTAL re join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where re.customer_id = c.customer_id and ca.category_id = 11)) tmptab on c.customer_id = tmptab.tmpid where re.return_date is null and re.rental_date <= '2025-06-20 14:16:23' and coalesce(re.return_date, current_timestamp) >= '2025-06-20 14:16:23' order by 1 |
Пример №8.8
Пользователь> в каких жанрах играли актёры, которые снимались в фильме "корова"
Система v0.46> Вывести уникальные значения "категория", с условием, что существует "игра актёра в фильме" и "актеры" с условием, что существуют "игры актёра в фильме" и "фильмы" с условием, что "название фильма" равно 'Корова', с сортировкой по возрастанию категории.
select distinct ca.name as "Категория"
from CATEGORY ca
join FILM_CATEGORY fc on fc.category_id = ca.category_id
join FILM f on fc.film_id = f.film_id
join FILM_ACTOR fa on fa.film_id = f.film_id
join ACTOR a on fa.actor_id = a.actor_id
join (
select distinct a.actor_id as tmpid
from ACTOR a
where exists (select *
from FILM_ACTOR fa
join FILM f on fa.film_id = f.film_id
where fa.actor_id = a.actor_id
and f.title = 'Корова')
) tmptab on a.actor_id = tmptab.tmpid
order by 1
Фрагмент | Интерпретация |
---|---|
в каких жанрах | категория |
играли | игра актёра в фильме |
актёры | актер |
, | игнор |
которые снимались | игра актёра в фильме |
в фильме "корова" | название фильма - равно 'Корова' |

Пример №9.1
Пользователь> максимальная величина платежа за этот год клиента с именем костя
Система v0.46> Вывести "максимум величины платежа", с условием, что "дата платежа" от '2025-01-01 00:00:00' до '2025-12-31 23:59:59' и существуют "клиенты" с условием, что имя клиента (без учета регистра) равно 'КОСТЯ'.
select max(p.amount) as "Максимум величины платежа"
from PAYMENT p
where p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59'
and exists (select *
from CUSTOMER c
where p.customer_id = c.customer_id
and upper(c.first_name) = 'КОСТЯ')
Фрагмент | Интерпретация |
---|---|
максимальная величина платежа | max(величина платежа) |
за этот год | дата платежа - текущий год (2025.01.01-2025.12.31 отн. 2025.06.20 14:16) |
клиента | клиент |
с именем костя | имя клиента - равно 'КОСТЯ' |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select max(p.amount) as "Максимум величины платежа" from PAYMENT p where p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59' and exists (select * from CUSTOMER c where p.customer_id = c.customer_id and upper(c.first_name) = 'КОСТЯ') | select max(p.amount) as "Максимум величины платежа" from PAYMENT p where p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59' and exists (select * from CUSTOMER c where p.customer_id = c.customer_id and upper(c.first_name) = 'КОСТЯ') |
Пример №9.2
Пользователь> Какой доход от аренды фильма ACE GOLDFINGER в 2005 году
Система v0.46> Вывести "сумма платежей", с условием, что "дата платежа" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и существуют "прокаты", "фильмы на складе" и "фильмы" с условием, что название фильма (без учета регистра) равно 'ACE GOLDFINGER'.
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
where p.payment_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
and exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where p.rental_id = re.rental_id
and upper(f.title) = 'ACE GOLDFINGER')
Фрагмент | Интерпретация |
---|---|
Какой доход от аренды | сумма платежей |
фильма | фильм |
ACE GOLDFINGER | название фильма равно 'ACE GOLDFINGER' |
в 2005 году | дата платежа - 2005 год |
Пример №9.3
Пользователь> самый короткий и самый длинный фильмы
Система v0.46> Вывести поля "фильм" и "продолжительность фильма", с условием, что "продолжительность фильма" равно минимальному значению или "продолжительность фильма" равно максимальному значению, с сортировкой по возрастанию продолжительности фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
where f.length = (select min(f.length) from FILM f)
or f.length = (select max(f.length) from FILM f)
order by 2
Фрагмент | Интерпретация |
---|---|
самый | having by: минимум |
короткий и самый длинный фильмы | продолжительность фильма = Min or Max |
Пример №9.4
Пользователь> покажи дату последнего сданного в прокат фильма в категории 'комедия'
Система v0.46> Вывести уникальные значения "фильм" и "дата начала аренды", с условием, что "категория фильма" равно 'Комедия' и "дата начала аренды" равно максимальному значению и существует "прокат" и "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
re.rental_date as "Дата начала аренды"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5
and re.rental_date = (select max(re.rental_date)
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 5)
order by 1
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
дату последнего | дата начала аренды = Max |
сданного в прокат фильма | игнор |
в категории | категория |
'комедия' | идентификатор категории - равно Комедия |
Пример №9.5
Пользователь> Вывести общую сумму платежа выданных в прокат фильмов в промежутке между 2000 и 2006 годами
Система v0.46> Вывести "сумма величин платежа", с условием, что существуют "прокаты" с условием, что "дата начала аренды" от '2000-01-01 00:00:00' до '2006-12-31 23:59:59'.
select sum(p.amount) as "Сумма величин платежа"
from PAYMENT p
where exists (select *
from RENTAL re
where p.rental_id = re.rental_id
and re.rental_date between '2000-01-01 00:00:00' and '2006-12-31 23:59:59')
Фрагмент | Интерпретация |
---|---|
Вывести | игнор |
общую сумму платежа | sum(величина платежа) |
выданных в прокат фильмов | прокат |
в промежутке между 2000 и 2006 годами | дата начала аренды - с 2000 года по 2006 год |
Пример №9.6
Пользователь> Сколько комедий с рейтингом 16 плюс было взято в прокат клиентом с фамилией на букву “А", платеж по которым не произведен
Система v0.46> Вывести записи "количество фильмов", с условием, что "18 плюс фильма" и существуют "фильмы на складе", "прокаты" и "клиенты" с условием, что "категория фильма" равно 'Комедия' и "фамилия клиента" начинается с 'А' и не существуют "платежи".
select count(f.film_id) as "Количество фильмов"
from FILM f
where f.rating = 'NC-17'
and exists (select *
from FILM_CATEGORY fc
join INVENTORY iv on iv.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where fc.film_id = f.film_id
and ca.category_id = 5
and upper(c.last_name) like 'А%'
and not exists
(select *
from PAYMENT p
where p.rental_id = re.rental_id
))
Фрагмент | Интерпретация |
---|---|
Сколько | count(фильм) |
комедий | идентификатор категории - равно Комедия |
с рейтингом 16 плюс | 18 плюс фильма |
было взято в прокат | прокат |
клиентом | клиент |
с фамилией на букву “А" | фамилия клиента - like 'А%' |
, | игнор |
платеж по которым не произведен | отсутствует платеж |
Пример №9.7
Пользователь> фильмы из страны россия с наибольшей стоимостью
Система v0.46> Вывести уникальные значения "фильм" и "стоимость фильма", с условием, что "название страны" равно 'Россия' и "стоимость фильма" равно максимальному значению и существует "фильм на складе", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм",
f.rental_rate as "Стоимость фильма"
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
join COUNTRY co on ci.country_id = co.country_id
where co.country = 'Россия'
and f.rental_rate = (select max(f.rental_rate)
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
join COUNTRY co on ci.country_id = co.country_id
where co.country = 'Россия')
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
из страны россия | название страны - равно 'Россия' |
с наибольшей стоимостью | стоимость фильма = Max |
Пример №9.8
Пользователь> выведи сумму платежей всех выданных фильмов в жанре спорт в текущем году
Система v0.46> Вывести "сумма платежей", с условием, что "категория фильма" равно 'Спорт' и "дата платежа" от '2025-01-01 00:00:00' до '2025-12-31 23:59:59' и существует "прокат" и "фильм на складе".
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 15
and p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59'
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
сумму платежей | сумма платежей |
всех выданных фильмов | игнор |
в жанре | категория |
спорт | идентификатор категории - равно Спорт |
в текущем году | дата платежа - текущий год (2025.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select sum(p.amount) as "Сумма платежей" from PAYMENT p join RENTAL re on p.rental_id = re.rental_id join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where ca.category_id = 15 and p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59' | select sum(p.amount) as "Сумма платежей" from PAYMENT p join RENTAL re on p.rental_id = re.rental_id join INVENTORY iv on re.inventory_id = iv.inventory_id join FILM f on iv.film_id = f.film_id join FILM_CATEGORY fc on fc.film_id = f.film_id join CATEGORY ca on fc.category_id = ca.category_id where ca.category_id = 15 and p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59' |
Пример №9.9
Пользователь> какое самое длинное описание среди фильмов ужасов
Система v0.46> Вывести поля "сюжет фильма", "фильм" и "длина сюжета фильма", с условием, что "категория фильма" равно 'Ужасы' и "длина сюжета фильма" равно максимальному значению, с сортировкой по возрастанию сюжета фильма.
select f.description as "Сюжет фильма",
f.title as "Фильм",
length(f.description) as "Длина сюжета фильма"
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 11
and length(f.description) = (select max(length(f.description))
from FILM f
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 11)
order by 1
Фрагмент | Интерпретация |
---|---|
какое самое длинное описание | длина сюжета фильма = Max |
среди фильмов | игнор |
ужасов | идентификатор категории - равно Ужасы |
Пример №9.10
Пользователь> какая общая продолжительность фильмов с жанром спорт
Система v0.46> Вывести "сумма продолжительностей фильма", с условием, что существуют "категории" с условием, что "категория фильма" равно 'Спорт'.
select sum(f.length) as "Сумма продолжительностей фильма"
from FILM f
where exists (select *
from FILM_CATEGORY fc
join CATEGORY ca on fc.category_id = ca.category_id
where fc.film_id = f.film_id
and ca.category_id = 15)
Фрагмент | Интерпретация |
---|---|
какая общая продолжительность фильмов | sum(продолжительность фильма) |
с жанром | категория не пусто |
спорт | идентификатор категории - равно Спорт |
Пример №9.11
Пользователь> количество невозвращенных фильмов
Система v0.46> Вывести записи "количество прокатов", с условием, что не "вернуть фильм проката" и существует "прокат".
select count(re.rental_id) as "Количество прокатов"
from RENTAL re
where re.return_date is null
Фрагмент | Интерпретация |
---|---|
количество | игнор |
невозвращенных | вернуть фильм проката |
фильмов | игнор |
Пример №9.12
Пользователь> Сумма платежей со всех фильмов за этого год
Система v0.46> Вывести "сумма платежей", с условием, что "дата платежа" от '2025-01-01 00:00:00' до '2025-12-31 23:59:59'.
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
where p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59'
Фрагмент | Интерпретация |
---|---|
Сумма платежей | сумма платежей |
со всех фильмов | игнор |
за этого год | дата платежа - текущий год (2025.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59' | select sum(p.amount) as "Сумма платежей" from PAYMENT p where p.payment_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59' |
Пример №9.13
Пользователь> Покажи самый долгий фильм с возрастным рейтингом 18
Система v0.46> Вывести поля "фильм" и "продолжительность фильма", с условием, что "18 плюс фильма" и "продолжительность фильма" равно максимальному значению, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма"
from FILM f
where f.rating = 'NC-17'
and f.length = (select max(f.length)
from FILM f
where f.rating = 'NC-17')
order by 1
Фрагмент | Интерпретация |
---|---|
Покажи | игнор |
самый долгий | продолжительность фильма = Max |
фильм | игнор |
с возрастным рейтингом 18 | 18 плюс фильма |
Пример №9.14
Пользователь> Сумма всех платежей менее 100 рублей
Система v0.46> Вывести "сумма величин платежа", с условием, что "величина платежа" меньше 100.
select sum(p.amount) as "Сумма величин платежа"
from PAYMENT p
where p.amount < 100
Фрагмент | Интерпретация |
---|---|
Сумма | Sum |
всех | игнор |
платежей | платеж |
менее 100 рублей | величина платежа ] .. 100[ |
Пример №9.15
Пользователь> название фильма с минимальный длительностью
Система v0.46> Вывести поля "название фильма" и "продолжительность фильма", с условием, что "продолжительность фильма" равно минимальному значению, с сортировкой по возрастанию названия фильма.
select f.title as "Название фильма",
f.length as "Продолжительность фильма"
from FILM f
where f.length = (select min(f.length) from FILM f)
order by 1
Фрагмент | Интерпретация |
---|---|
название фильма | название фильма |
с минимальный длительностью | продолжительность фильма = Min |
Пример №9.16
Пользователь> фио актёров с минимальными именами по длине
Система v0.46> Вывести поля "фио актера" и "длина имени актера", с условием, что "длина имени актера" равно минимальному значению, с сортировкой по возрастанию фио актера. Мне непонятен фрагмент "по длине", но это, скорее всего, несущественно. Уверенность в результате - 90%.
select concat(a.first_name, ' ', a.last_name) as "Фио актера",
length(a.first_name) as "Длина имени актера"
from ACTOR a
where length(a.first_name) = (select min(length(a.first_name)) from ACTOR a)
order by 1
Фрагмент | Интерпретация |
---|---|
фио актёров | фио актера |
с минимальными именами | длина имени актера = Min |
по длине | непонятный фрагмент |
Пользователь> фио актёров с самыми короткими именами
Система v0.46> Вывести поля "фио актера" и "длина имени актера", с условием, что "длина имени актера" равно минимальному значению, с сортировкой по возрастанию фио актера.
select concat(a.first_name, ' ', a.last_name) as "Фио актера",
length(a.first_name) as "Длина имени актера"
from ACTOR a
where length(a.first_name) = (select min(length(a.first_name)) from ACTOR a)
order by 1
Фрагмент | Интерпретация |
---|---|
фио актёров | фио актера |
с самыми короткими именами | длина имени актера = Min |
Пользователь> фио актёров с именами длиной не менее трёх символов
Система v0.46> Вывести уникальные значения "фио актера", с условием, что "длина имени актера" больше или равно 3, с сортировкой по возрастанию фио актера.
select distinct concat(a.first_name, ' ', a.last_name) as "Фио актера"
from ACTOR a
where length(a.first_name) >= 3
order by 1
Фрагмент | Интерпретация |
---|---|
фио актёров | фио актера |
с именами длиной не менее трёх символов | "длина имени актера" больше или равно 3 |
Пользователь> фио актёров, у которых длина имени не менее трёх символов
Система v0.46> Вывести поля "фио актера" и "длина имени актера", с условием, что "длина имени актера" больше или равно 3, с сортировкой по возрастанию фио актера. Мне непонятен фрагмент "символов", но это, скорее всего, несущественно. Уверенность в результате - 90%.
select concat(a.first_name, ' ', a.last_name) as "Фио актера",
length(a.first_name) as "Длина имени актера"
from ACTOR a
where length(a.first_name) >= 3
order by 1
Фрагмент | Интерпретация |
---|---|
фио актёров | фио актера |
, | игнор |
у которых длина имени | длина имени актера - не ] .. 3[ |
не менее трёх | игнор |
символов | непонятный фрагмент |
Пример №9.17
Пользователь> фильмы с продолжительностью не выше средней стоимости проката
Система v0.46> Вывести поля "фильм", "продолжительность фильма" и "стоимость фильма", с условием, что "продолжительность фильма" меньше или равно "среднего от стоимости фильма", с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.length as "Продолжительность фильма",
f.rental_rate as "Стоимость фильма"
from FILM f
where f.length <= (select avg(f.rental_rate) from FILM f)
order by 1
Фрагмент | Интерпретация |
---|---|
фильмы | фильм |
с продолжительностью | продолжительность фильма |
не выше | игнор |
средней стоимости проката | having продолжительность фильма Le AVG(стоимость фильма) |
Пример №9.18
Пользователь> какое количество покупателей с именем содержащим меньше шести букв взявших фильм меньше чем на две недели в 2006 году из категории комедия на английском языке со стоимостью аренды выше средней
Система v0.46> Вывести записи "количество клиентов", с условием, что "длина имени клиента" меньше 6 и "количество дней проката" меньше 14 и "дата начала аренды" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и "категория фильма" равно 'Комедия' и "язык озвучки" равно 'английский' и "аренда завершена проката" и "стоимость фильма" больше "среднего от стоимости фильма" и существует "прокат" и "фильм на складе".
select count(distinct c.customer_id) as "Количество клиентов"
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join LANGUAGE la on f.language_id = la.language_id
join CATEGORY ca on fc.category_id = ca.category_id
where length(c.first_name) < 6
and date_part('day', re.return_date - re.rental_date) < 14
and re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
and ca.category_id = 5
and la.language_id = 7
and re.return_date is not null
and f.rental_rate > (select avg(f.rental_rate)
from CUSTOMER c
join RENTAL re on re.customer_id = c.customer_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join LANGUAGE la on f.language_id = la.language_id
join CATEGORY ca on fc.category_id = ca.category_id
where length(c.first_name) < 6
and date_part('day', re.return_date - re.rental_date) < 14
and re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
and ca.category_id = 5
and la.language_id = 7
and re.return_date is not null)
Фрагмент | Интерпретация |
---|---|
какое количество покупателей | count(клиент) |
с именем содержащим меньше шести букв | "длина имени клиента" меньше 6 |
взявших фильм | прокат |
меньше чем на две недели | количество дней проката ] .. 2[ нед |
в 2006 году | дата начала аренды - 2006 год |
из категории | категория |
комедия | идентификатор категории - равно Комедия |
на английском | идентификатор языка озвучки - равно английский |
языке | язык озвучки |
со стоимостью аренды | стоимость фильма |
выше средней | having стоимость фильма Gt AVG(стоимость фильма) |
Пример №9.19
Пользователь> какая средняя стоимость аренды фильмов описание которых содержит слово лошадь и в которых играет михаил боярский
Система v0.46> Вывести "средняя стоимость фильма", с условием, что "сюжет фильма" содержит подстроку 'ЛОШАДЬ' и существуют "игры актёра в фильме" и "актеры" с условием, что имя актера (без учета регистра) равно 'МИХАИЛ' и "фамилия актера" равно 'Боярский'.
select avg(f.rental_rate) as "Средняя стоимость фильма"
from FILM f
where position('ЛОШАДЬ' in upper(f.description)) > 0
and exists (select *
from FILM_ACTOR fa
join ACTOR a on fa.actor_id = a.actor_id
where fa.film_id = f.film_id
and upper(a.first_name) = 'МИХАИЛ'
and a.last_name = 'Боярский')
Фрагмент | Интерпретация |
---|---|
какая средняя стоимость аренды | avg(стоимость фильма) |
фильмов | фильм |
описание которых содержит слово лошадь | сюжет фильма - содержит подстроку 'ЛОШАДЬ' |
и | игнор |
в которых играет | игра актёра в фильме |
михаил | имя актера - равно 'МИХАИЛ' |
боярский | фамилия актера - равно 'Боярский' |
Пример №9.20
Пользователь> общая сумма платежей за фильмы на английском языке в Казани
Система v0.46> Вывести "сумма величин платежа", с условием, что существуют "прокаты", "фильмы на складе", "фильмы", "склады" и "адреса" с условием, что "язык озвучки" равно 'английский' и "наименование города" равно 'Казань'.
select sum(p.amount) as "Сумма величин платежа"
from PAYMENT p
where exists (select *
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join STORE st on iv.store_id = st.store_id
join LANGUAGE la on f.language_id = la.language_id
join ADDRESS ad on st.address_id = ad.address_id
join CITY ci on ad.city_id = ci.city_id
where p.rental_id = re.rental_id
and la.language_id = 7
and ci.city = 'Казань')
Фрагмент | Интерпретация |
---|---|
общая сумма платежей | sum(величина платежа) |
за фильмы | фильм |
на английском | идентификатор языка озвучки - равно английский |
языке | язык озвучки |
в Казани | наименование города - равно 'Казань' |
Пример №9.21
Пользователь> выведи сумму платежей всех выданных фильмов в жанре спорт в 2006 году
Система v0.46> Вывести "сумма платежей", с условием, что "категория фильма" равно 'Спорт' и "дата платежа" от '2006-01-01 00:00:00' до '2006-12-31 23:59:59' и существует "прокат" и "фильм на складе".
select sum(p.amount) as "Сумма платежей"
from PAYMENT p
join RENTAL re on p.rental_id = re.rental_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
join FILM_CATEGORY fc on fc.film_id = f.film_id
join CATEGORY ca on fc.category_id = ca.category_id
where ca.category_id = 15
and p.payment_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59'
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
сумму платежей | сумма платежей |
всех выданных фильмов | игнор |
в жанре | категория |
спорт | идентификатор категории - равно Спорт |
в 2006 году | дата платежа - 2006 год |
Пример №9.22
Пользователь> вывести последнюю запись о прокате
Система v0.46> Вывести "максимум даты начала аренды", с условием, что существует "прокат".
select max(re.rental_date) as "Максимум даты начала аренды" from RENTAL re
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
последнюю | having by: максимум |
запись о прокате | max(дата начала аренды) |
Пользователь> вывести последний прокат
Система v0.46> Вывести "максимум даты начала аренды", с условием, что существует "прокат".
select max(re.rental_date) as "Максимум даты начала аренды" from RENTAL re
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
последний | having by: максимум |
прокат | max(дата начала аренды) |
Пример №9.23
Пользователь> последний клиент не завершивший аренду фильма в 2005 году
Система v0.46> Вывести уникальные значения "клиент" и "дата проката", с условием, что "незавершенная аренда проката" и "дата начала аренды" от '2005-01-01 00:00:00' до '2005-12-31 23:59:59' и "дата проката" равно максимальному значению и существует "прокат", с сортировкой по возрастанию клиента.
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент",
re.rental_date as "Дата проката"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
where re.return_date is null
and re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59'
and re.rental_date = (select max(re.rental_date)
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
where re.return_date is null
and re.rental_date between '2005-01-01 00:00:00' and '2005-12-31 23:59:59')
order by 1
Фрагмент | Интерпретация |
---|---|
последний | having by: максимум |
клиент | дата проката = Max |
не завершивший аренду фильма | незавершенная аренда проката |
в 2005 году | дата начала аренды - 2005 год |
Пример №9.24
Пользователь> сколько в среднем фильмов берут в прокат за год
Система v0.46> Вывести "среднее количество прокатов", с условием, что "прокаты", с группировкой по "году проката".
select avg(tmpsel.tmpval) as "Среднее количество прокатов" from (
select extract(year from re.rental_date) as "Год проката",
count(re.rental_id) as tmpval
from RENTAL re
group by 1
) tmpsel
Фрагмент | Интерпретация |
---|---|
сколько в среднем | count(прокат) |
фильмов берут в прокат | среднее от количества |
за год | дата начала аренды - group by |
Пример №9.25
Пользователь> сколько раз фильм степь брал клиент вацлав ермолаев
Система v0.46> Вывести записи "количество прокатов", с условием, что имя клиента (без учета регистра) равно 'ВАЦЛАВ' и фамилия клиента (без учета регистра и буквы Ё) равно 'ЕРМОЛАЕВ' и "название фильма" равно 'Степь' и существует "фильм на складе" и "прокат".
select count(distinct re.rental_id) as "Количество прокатов"
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where upper(c.first_name) = 'ВАЦЛАВ'
and replace(upper(c.last_name), 'Ё', 'Е') = 'ЕРМОЛАЕВ'
and f.title = 'Степь'
Фрагмент | Интерпретация |
---|---|
сколько раз фильм степь брал | count(прокат) |
клиент | клиент |
вацлав | имя клиента равно 'ВАЦЛАВ' |
ермолаев | фамилия клиента равно 'ЕРМОЛАЕВ' |
Пример №9.26
Пользователь> средняя величина задержки фильма
Система v0.46> Вывести "среднее число дней задержки возврата фильма", с условием, что "возврат фильма с задержкой" и существует "прокат" и "фильм на складе".
select avg(date_part('day', re.return_date - re.rental_date) - f.rental_duration) as "Среднее число дней задержки возврата фильма"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > f.rental_duration
Фрагмент | Интерпретация |
---|---|
средняя величина задержки фильма | avg(число дней задержки возврата фильма) |
Пользователь> НА сколько в среднем задерживают фильм
Система v0.46> Вывести "среднее число дней задержки возврата фильма", с условием, что "возврат фильма с задержкой" и существует "прокат" и "фильм на складе".
select avg(date_part('day', re.return_date - re.rental_date) - f.rental_duration) as "Среднее число дней задержки возврата фильма"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where re.return_date is not null
and date_part('day', re.return_date - re.rental_date) > f.rental_duration
Фрагмент | Интерпретация |
---|---|
НА сколько в среднем задерживают фильм | avg(число дней задержки возврата фильма) |
Пример №9.27
Пользователь> когда в последний раз клиент по имени александр брал фильм корова
Система v0.46> Вывести "максимум даты начала аренды", с условием, что имя клиента (без учета регистра и буквы Ё) равно 'АЛЕКСАНДР' и "название фильма" равно 'Корова' и существует "прокат" и "фильм на складе".
select max(re.rental_date) as "Максимум даты начала аренды"
from RENTAL re
join CUSTOMER c on re.customer_id = c.customer_id
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
where replace(upper(c.first_name), 'Ё', 'Е') = 'АЛЕКСАНДР'
and f.title = 'Корова'
Фрагмент | Интерпретация |
---|---|
когда | дата начала аренды |
в последний | Max |
раз | дата проката |
клиент | клиент |
по имени александр | имя клиента - равно 'АЛЕКСАНДР' |
брал фильм | прокат |
корова | название фильма - равно 'Корова' |
Пример №9.28
Пользователь> сколько фильмов на букву а брали в этом году
Система v0.46> Вывести записи "количество прокатов", с условием, что "дата начала аренды" от '2025-01-01 00:00:00' до '2025-12-31 23:59:59' и существуют "фильмы на складе" и "фильмы" с условием, что "название фильма" начинается с 'А' и существует "прокат".
select count(re.rental_id) as "Количество прокатов"
from RENTAL re
where re.rental_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59'
and exists (select *
from INVENTORY iv
join FILM f on iv.film_id = f.film_id
where re.inventory_id = iv.inventory_id
and upper(f.title) like 'А%')
Фрагмент | Интерпретация |
---|---|
сколько фильмов на букву а брали | count(прокат) |
в этом году | дата начала аренды - текущий год (2025.01.01-2025.12.31 отн. 2025.06.20 14:16) |
Результат не совпадает с эталоном
Правильный результат | Текущий результат |
---|---|
select count(re.rental_id) as "Количество прокатов" from RENTAL re where re.rental_date between '2006-01-01 00:00:00' and '2006-12-31 23:59:59' and exists (select * from INVENTORY iv join FILM f on iv.film_id = f.film_id where re.inventory_id = iv.inventory_id and upper(f.title) like 'А%') | select count(re.rental_id) as "Количество прокатов" from RENTAL re where re.rental_date between '2025-01-01 00:00:00' and '2025-12-31 23:59:59' and exists (select * from INVENTORY iv join FILM f on iv.film_id = f.film_id where re.inventory_id = iv.inventory_id and upper(f.title) like 'А%') |
Пример №9.29
Пользователь> сколько фильмов сдано в аренду на складе, на котором работает александр иванов
Система v0.46> Вывести записи "количество прокатов", с условием, что существуют "сотрудники" и "склады" с условием, что имя сотрудника (без учета регистра и буквы Ё) равно 'АЛЕКСАНДР' и фамилия сотрудника (без учета регистра) равно 'ИВАНОВ' и существует "прокат".
select count(re.rental_id) as "Количество прокатов"
from RENTAL re
where exists (select *
from STAFF s
join STORE st on s.store_id = st.store_id
where re.staff_id = s.staff_id
and replace(upper(s.first_name), 'Ё', 'Е') = 'АЛЕКСАНДР'
and upper(s.last_name) = 'ИВАНОВ')
Фрагмент | Интерпретация |
---|---|
сколько фильмов сдано в аренду | count(прокат) |
на складе | склад |
, | игнор |
на котором работает | сотрудник и склад - связь (s.store_id = st.store_id) |
александр | имя сотрудника равно 'АЛЕКСАНДР' |
иванов | фамилия сотрудника равно 'ИВАНОВ' |

Пример №10.1
Пользователь> Фильмы с одинаковым названием и годом выпуска раньше 2009
Система v0.46> Вывести поля "фильм" и "год выхода фильма", с условием, что "год выхода фильма" меньше 2009 и "название фильма" совпадают, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
f.release_year as "Год выхода фильма"
from FILM f
where f.release_year < 2009
and f.title in (select distinct f.title
from FILM f
group by 1
having count(f.film_id) > 1)
order by 1
Фрагмент | Интерпретация |
---|---|
Фильмы | фильм |
с одинаковым названием | название фильма с одинаковыми значениями |
и | игнор |
годом выпуска | год выхода фильма - ] .. 2009[ |
раньше 2009 | игнор |
Пример №10.2
Пользователь> выведи фильмы названия которых оканчиваются на одинаковое слово
Система v0.46> Вывести поля "фильм" и "последнее слово названия фильма", с условием, что "названия фильма" оканчиваются на одинаковое слово, с сортировкой по возрастанию последнего слова названия фильма.
select f.title as "Фильм",
reverse(split_part(reverse(f.title), ' ', 1)) as "Последнее слово названия фильма"
from FILM f
where reverse(split_part(reverse(f.title), ' ', 1)) in (select distinct reverse(split_part(reverse(f.title), ' ', 1))
from FILM f
group by 1
having count(f.film_id) > 1)
order by 2
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
фильмы | фильм |
названия которых оканчиваются | название фильма оканчивается одинаковым словом |
на одинаковое слово | игнор |
Пользователь> выведи фильмы названия которых оканчиваются на одинаковую букву
Система v0.46> Вывести поля "фильм" и "последняя буква названия фильма", с условием, что "названия фильма" оканчиваются на одинаковую букву, с сортировкой по возрастанию последней буквы названия фильма.
select f.title as "Фильм",
substr(f.title, length(f.title), 1) as "Последняя буква названия фильма"
from FILM f
where substr(f.title, length(f.title), 1) in (select distinct substr(f.title, length(f.title), 1)
from FILM f
group by 1
having count(f.film_id) > 1)
order by 2
Фрагмент | Интерпретация |
---|---|
выведи | игнор |
фильмы | фильм |
названия которых оканчиваются | название фильма оканчивается одинаковой буквой |
на одинаковую букву | игнор |
Пример №10.3
Пользователь> покажи клиентов у которых одинаковая фамилия
Система v0.46> Вывести уникальные значения "клиент", с условием, что "фамилия клиента" совпадают, с сортировкой по возрастанию "фамилии клиента".
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where c.last_name in (select distinct c.last_name
from CUSTOMER c
group by 1
having count(c.customer_id) > 1)
order by c.last_name
Фрагмент | Интерпретация |
---|---|
покажи | игнор |
клиентов | клиент |
у которых одинаковая фамилия | фамилия клиента с одинаковыми значениями |
Пример №10.4
Пользователь> с кем вместе работает сотрудник Иван Кузнецов
Система v0.46> Вывести уникальные значения "сотрудник", с условием, что имя сотрудника (без учета регистра) не равно 'ИВАН' или фамилия сотрудника (без учета регистра и буквы Ё) не равно 'КУЗНЕЦОВ' и "склад" одинаковый, что имя сотрудника (без учета регистра) равно 'ИВАН' и фамилия сотрудника (без учета регистра и буквы Ё) равно 'КУЗНЕЦОВ', с сортировкой по возрастанию сотрудника.
select distinct concat(s.first_name, ' ', s.last_name) as "Сотрудник"
from STAFF s
join STORE st on s.store_id = st.store_id
where (upper(s.first_name) != 'ИВАН' or replace(upper(s.last_name), 'Ё', 'Е') != 'КУЗНЕЦОВ')
and st.store_id in (select distinct st.store_id
from STAFF s
join STORE st on s.store_id = st.store_id
where upper(s.first_name) = 'ИВАН'
and replace(upper(s.last_name), 'Ё', 'Е') = 'КУЗНЕЦОВ')
order by 1
Фрагмент | Интерпретация |
---|---|
с кем | сотрудник |
вместе | совместно с 'склад' |
работает | сотрудник и склад - связь (s.store_id = st.store_id) |
сотрудник | сотрудник |
Иван | имя сотрудника равно 'ИВАН' |
Кузнецов | фамилия сотрудника равно 'КУЗНЕЦОВ' |
Пример №10.5
Пользователь> в какой год арендовали все фильмы
Система v0.46> Вывести уникальные значения "год проката", с группировкой по "году проката", с условием, что существует "прокат" и "фильм на складе", с группировочным условием, что количество разных фильмов для каждого года проката равно количеству разных фильмов всего, с сортировкой по возрастанию года проката.
select distinct extract(year from re.rental_date) as "Год проката"
from RENTAL re
join INVENTORY iv on re.inventory_id = iv.inventory_id
join FILM f on iv.film_id = f.film_id
group by 1
having count(distinct f.film_id) = (select count(distinct f.film_id) from FILM f)
order by 1
Фрагмент | Интерпретация |
---|---|
в какой год | group by extract(year from re.rental_date) |
арендовали | прокат |
все | ВСЕ |
фильмы | фильм |
Пример №10.6
Пользователь> вывести фильмы, которые есть на каждом складе
Система v0.46> Вывести поля "фильм" и "количество разных складов", с группировкой по "фильму", с условием, что существует "фильм на складе", с группировочным условием, что количество разных складов для каждого фильма равно количеству разных складов всего, с сортировкой по возрастанию фильма.
select f.title as "Фильм",
count(distinct st.store_id) as "Количество разных складов"
from FILM f
left join INVENTORY iv on iv.film_id = f.film_id
left join STORE st on iv.store_id = st.store_id
group by f.film_id
having count(distinct st.store_id) = (select count(distinct st.store_id) from STORE st)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
фильмы | фильм |
, | игнор |
которые есть | быть |
на каждом | ВСЕ |
складе | с каждым склад |
Пример №10.7
Пользователь> вывести склады и фильмы, включая пустые склады
Система v0.46> Вывести уникальные значения "склад" и "фильм", с условием, что существует "фильм на складе", с сортировкой по возрастанию склада, объединяя с такими записями, что "склады" с условием, что "пустой склад".
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
f.title as "Фильм"
from STORE st
join INVENTORY iv on iv.store_id = st.store_id
join FILM f on iv.film_id = f.film_id
union
select distinct (select aa.address
from ADDRESS aa
where aa.address_id = st.address_id) as "Склад",
NULL
from STORE st
where not exists (select *
from INVENTORY iv2
join FILM f2 on iv2.film_id = f2.film_id
where iv2.store_id = st.store_id)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
склады | склад |
и | игнор |
фильмы | фильм |
, включая | ОБЪЕДИНЯЯ |
пустые склады | пустой склад |
Пример №10.8
Пользователь> вывести фильмы, которые брали покупатели с одинаковыми именами
Система v0.46> Вывести уникальные значения "фильм", с условием, что "имя клиента" совпадают и существует "фильм на складе" и "прокат", с сортировкой по возрастанию фильма.
select distinct f.title as "Фильм"
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
where c.first_name in (select distinct c.first_name
from FILM f
join INVENTORY iv on iv.film_id = f.film_id
join RENTAL re on re.inventory_id = iv.inventory_id
join CUSTOMER c on re.customer_id = c.customer_id
group by 1
having count(c.customer_id) > 1)
order by 1
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
фильмы | фильм |
, | игнор |
которые брали | прокат |
покупатели | клиент |
с одинаковыми именами | имя клиента с одинаковыми значениями |
Пример №10.9
Пользователь> сколько одинаковых фамилий у актёров
Система v0.46> Вывести "количество разных фамилий актера", с условием, что "фамилия актера" совпадают.
select count(distinct a.last_name) as "Количество разных фамилий актера"
from ACTOR a
where a.last_name in (select distinct a.last_name
from ACTOR a
group by 1
having count(a.actor_id) > 1)
Фрагмент | Интерпретация |
---|---|
сколько | Count |
одинаковых фамилий | фамилия актера с одинаковыми значениями |
у актёров | актер |
Пользователь> одинаковые фамилии у актёров
Система v0.46> Вывести уникальные значения "фамилия актера", с условием, что "фамилия актера" совпадают, с сортировкой по возрастанию фамилии актера.
select distinct a.last_name as "Фамилия актера"
from ACTOR a
where a.last_name in (select distinct a.last_name
from ACTOR a
group by 1
having count(a.actor_id) > 1)
order by 1
Фрагмент | Интерпретация |
---|---|
одинаковые фамилии | фамилия актера с одинаковыми значениями |
у актёров | актер |
Пример №10.10
Пользователь> сколько всего актёров с разными именами
Система v0.46> Вывести записи "количество актеров", с условием, что "имя актера" не совпадают.
select count(a.actor_id) as "Количество актеров"
from ACTOR a
where a.first_name in (select distinct a.first_name
from ACTOR a
group by 1
having count(a.actor_id) <= 1)
Фрагмент | Интерпретация |
---|---|
сколько всего актёров | count(актер) |
с разными именами | имя актера с одинаковыми значениями |
Пример №10.11
Пользователь> вывести людей с одинаковыми именем и фамилией, которые брали в прокате фильмы
Система v0.46> Вывести уникальные значения "клиент", с условием, что существуют "прокаты" и "имя клиента и фамилия клиента" совпадают, с сортировкой по возрастанию "имени клиента и фамилия клиента".
select distinct concat(c.first_name, ' ', c.last_name) as "Клиент"
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id)
and concat(c.first_name, ' + ', c.last_name) in (select distinct concat(c.first_name, ' + ', c.last_name)
from CUSTOMER c
where exists (select *
from RENTAL re
where re.customer_id = c.customer_id)
group by 1
having count(c.customer_id) > 1)
order by concat(c.first_name, ' + ', c.last_name)
Фрагмент | Интерпретация |
---|---|
вывести | игнор |
людей | клиент |
с одинаковыми именем | имя клиента с одинаковыми значениями |
и | игнор |
фамилией | фамилия клиента с одинаковыми значениями |
, | игнор |
которые брали в прокате фильмы | прокат |
Лингво-настройки
Лингво-настройки для демонстрационной БД Pagila (фильмы, покупатели...). Строки исходной БД переведены на русский язык.
Диалект SQL: PostgreSQL
Зависимость таблиц:
Таблица CUSTOMER (c) - "клиент"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | concat(c.first_name, ' ', c.last_name) | строка | клиент
покупатель кто брал|арендовал|вернул|просрочил люди арендатор |
Выражение "имя клиента" (Firstname) инфо | c.first_name | строка | имя
звать |
Выражение "фамилия клиента" (Lastname) инфо | c.last_name | строка | фамилия |
Выражение "email клиента" инфо | c.email | строка | email
электронная почта электронный адрес адрес электронной почты почта |
Выражение "фио клиента" | concat(c.first_name, ' ', c.last_name) | строка | фио
фамилия имя отчество полное имя |
Выражение "идентификатор клиента" (Key) | c.customer_id | число | идентификатор
id |
Выражение "дата прихода клиента" | select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id | дата-время | дата прихода
новый клиент |
Условие | c.active = 1 | двоичное | активный |
Связь в ADDRESS | c.address_id = ad.address_id | на 1 запись CUSTOMER ровно 1 запись ADDRESS | |
Связь из PAYMENT | p.customer_id = c.customer_id | на 1 запись CUSTOMER любое число записей PAYMENT | |
Связь из RENTAL | re.customer_id = c.customer_id | на 1 запись CUSTOMER любое число записей RENTAL, rank=5 | |
Связь в STORE | Дорожка таблиц: - RENTAL - INVENTORY - | на 1 запись CUSTOMER любое число записей STORE | |
Связь из STAFF | Дорожка таблиц: - RENTAL - | на 1 запись CUSTOMER любое число записей STAFF |
Таблица FILM (f) - "фильм"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | f.title | строка | фильм
художественный|прокатный фильм блокбастер |
Выражение "идентификатор фильма" (Key) | f.film_id | число | идентификатор
id |
Выражение "название фильма" (Value) инфо | f.title | лингво-строка | название
наименование имя |
Выражение "стоимость фильма" инфо | f.rental_rate | деньги, Ruble | стоимость|цена проката|аренды?
стоимость|цена на аренду арендная стоимость|цена сколько стоит аренда? прокат? арендовать? Min: дешевый бюджетный Max: дорогой |
Выражение "стоимость залога фильма" инфо | f.replacement_cost | деньги, Ruble | стоимость|цена залога|возмещения в? случае? утраты?
залоговая стоимость|цена штраф за утрату штраф утраты? |
Выражение "продолжительность фильма" инфо | f.length | число, Minute | продолжительность
длительность идти идущий Min: короткий Max: длинный продолжительный долгий длительный |
Выражение "сюжет фильма" инфо | f.description | строка | сюжет
описание краткое содержание |
Выражение "возрастной рейтинг" инфо | f.rating | лингво-строка (enum) | возрастной? рейтинг
возрастное ограничение |
Выражение "год выхода фильма" инфо | f.release_year | число, Year | год|дата выхода|выпуска|создания фильма?
вышедший выпустить |
Выражение "год выхода фильма" | f.release_year | число, Year | выход
снятый|выпуска снимавшихся |
Выражение "дополнительные материалы фильма" инфо | f.special_features | строка | дополнительные материалы
специальный? атрибут |
Выражение "срок возврата фильма" инфо | f.rental_duration | строка, Day | срок возврата
максимально возможный срок проката |
Условие | f.rating = 'G' | двоичное | без возрастных? ограничений
без ограничения возраста для любого возраста |
Условие | f.rating = 'NC-17' | двоичное | 18|17|16 плюс
с|от 18|17|16 лет возрастной рейтинг от? 18|17|16 плюс? возрастное? ограничение от? 16|17|18 лет? рейтинг NC17 рейтинг от? 16|17|18 плюс? возрастной? рейтинг не для детей возрастной? рейтинг для взрослых для взрослых |
Условие | f.rating != 'NC-17' | двоичное | до|менее|ниже 18|16 лет|плюс
возрастной? рейтинг для детей детский рейтинг |
Условие | [PostgreSql]
array_to_string(f.special_features,',') like '%УдаленныеСцены%' [Any] f.special_features like '%Deleted Scenes%' | двоичное | удаленные сцены
|
Условие | [PostgreSql]
array_to_string(f.special_features,',') like '%Трейлеры%' [Any] f.special_features like '%Trailers%' | двоичное | трейлер |
Условие | f.rating = 'PG' | двоичное | рейтинг для детей
детский рейтинг |
Условие | exists (select * from INVENTORY iv where iv.film_id = f.film_id
and not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null )) | двоичное | доступный для аренды|проката фильм? |
Условие | [PostgreSql]
array_to_string(f.special_features,',') like '%ЗакадровыеСцены%' [Any] f.special_features like '%Deleted Scenes%' | двоичное | закадровые сцены |
Связь в LANGUAGE | f.language_id = la.language_id | на 1 запись FILM ровно 1 запись LANGUAGE | |
Связь из FILM_ACTOR | fa.film_id = f.film_id | на 1 запись FILM любое число записей FILM_ACTOR | |
Связь из FILM_CATEGORY | fc.film_id = f.film_id | на 1 запись FILM любое число записей FILM_CATEGORY | |
Связь из INVENTORY | iv.film_id = f.film_id | на 1 запись FILM любое число записей INVENTORY |
Таблица ACTOR (a) - "актер"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | concat(a.first_name, ' ', a.last_name) | строка | актер
артист актриса артистка кинозвезда киноактер киноактриса кто играл|участвовал |
Выражение "имя актера" (Firstname) | a.first_name | строка | имя
звать |
Выражение "фамилия актера" (Lastname) | a.last_name | лингво-строка | фамилия |
Выражение "фио актера" | concat(a.first_name, ' ', a.last_name) | строка | фио
фамилия имя отчество полное имя |
Выражение "идентификатор актера" (Key) | a.actor_id | число | идентификатор
id |
Связь из FILM_ACTOR | fa.actor_id = a.actor_id | на 1 запись ACTOR любое число записей FILM_ACTOR |
Словарь COUNTRY (co) - "страна"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | co.country | строка | страна
государство |
Выражение "название страны" (Geo) | co.country | лингво-строка | название
наименование имя |
Выражение "идентификатор страны" (Key) | co.country_id | число | идентификатор
id |
Связь из CITY | ci.country_id = co.country_id | на 1 запись COUNTRY любое число записей CITY | |
Связь из PAYMENT | Дорожка таблиц: - RENTAL - INVENTORY - STORE - ADDRESS - CITY - | на 1 запись COUNTRY любое число записей PAYMENT |
Словарь CITY (ci) - "город"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | ci.city | строка | город
населенный пункт |
Выражение "наименование города" (Geo) | ci.city | лингво-строка | наименование
название имя |
Выражение "идентификатор города" (Key) | ci.city_id | число | идентификатор
id |
Условие | ci.city = 'Москва' | двоичное | житель Москвы
москвич проживающий в Москве |
Связь в COUNTRY | ci.country_id = co.country_id | на 1 запись CITY ровно 1 запись COUNTRY | |
Связь из ADDRESS | ad.city_id = ci.city_id | на 1 запись CITY любое число записей ADDRESS | |
Связь из PAYMENT | Дорожка таблиц: - RENTAL - INVENTORY - STORE - ADDRESS - | на 1 запись CITY любое число записей PAYMENT |
Таблица ADDRESS (ad) - "адрес"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | ad.address | строка | адрес
|
Выражение "идентификатор адреса" (Key) | ad.address_id | число | идентификатор
id |
Выражение "индекс адреса" | ad.postal_code | строка | почтовый? индекс |
Выражение "телефон адреса" | ad.phone | строка | телефон
номер телефона |
Выражение "адрес" (Value) инфо | ad.address | лингво-строка | |
Выражение "район адреса" (Geo) инфо | ad.district | лингво-строка | район
регион |
Условие | exists (select * from STAFF s2 where s2.address_id = ad.address_id) | двоичное | жить|проживать персонал|сотрудники |
Связь в CITY | ad.city_id = ci.city_id | на 1 запись ADDRESS ровно 1 запись CITY | |
Связь из CUSTOMER | c.address_id = ad.address_id | на 1 запись ADDRESS любое число записей CUSTOMER | |
Связь из STAFF | s.address_id = ad.address_id | на 1 запись ADDRESS любое число записей STAFF | |
Связь из STORE | st.address_id = ad.address_id | на 1 запись ADDRESS любое число записей STORE | |
Связь из STAFF | Дорожка таблиц: - STORE - | на 1 запись ADDRESS любое число записей STAFF | работать по адресу |
Связь из PAYMENT | Дорожка таблиц: - RENTAL - INVENTORY - STORE - | на 1 запись ADDRESS любое число записей PAYMENT |
Словарь LANGUAGE (la) - "язык озвучки"
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | la.name | строка | язык озвучки|фильма
язык перевод |
Выражение "название языка озвучки" (Value) | la.name | строка | название |
Выражение "идентификатор языка озвучки" (Key) | la.language_id | число | идентификатор
id |
Запись | 7 | число | английский
English американский |
Запись | 2 | число | итальянский
Italian |
Запись | 3 | число | японский
Japanese |
Запись | 4 | число | китайский
Mandarin |
Запись | 5 | число | французский
French |
Запись | 6 | число | немецкий
German германский |
Запись | 1 | число | русский
Russian |
Связь из FILM | f.language_id = la.language_id | на 1 запись LANGUAGE любое число записей FILM |
Таблица PAYMENT (p) - "платеж"
Ассоциированная таблица: CUSTOMER
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | p.amount | строка | платеж|плата|оплата|оплачивать|оплатить аренда? фильма?
платить|заплатить за? аренда? фильма? купить покупка |
Выражение "величина платежа" (Value) | p.amount | деньги, Ruble | величина|размер платежа|оплаты
оплата сумма платежа |
Выражение "дата платежа" (Date) | p.payment_date | дата-время | дата создания?
дата время дата |
Выражение "сумма платежей" | sum(p.amount) | деньги, Ruble | сумма|величина платежей|заработка
итог|доход сдачи в аренду потратить потраченная сумма|деньги доход|выручка|прибыль от аренды|проката доход|выручка|прибыль сумма дохода|выручки|прибыли с? проката? сумма дохода|выручки|прибыли с? аренды? собрать денег сбор денег? сколько денег Min: убыточный собрать|заплатить меньше всего денег? Max: доходный высокодоходный кассовый собрать|заплатить больше всего денег? продаваемый |
Выражение "идентификатор платежа" (Key) | p.payment_id | число | идентификатор
id |
Выражение "срок платежа" (Interval) | [PostgreSql] date_part('day', p.payment_date - re.rental_date)
[Any] datediff(p.payment_date, re.rental_date) | строка, Day | срок платежа
платежный срок |
Связь в CUSTOMER | p.customer_id = c.customer_id | на 1 запись PAYMENT ровно 1 запись CUSTOMER | |
Связь в RENTAL | p.rental_id = re.rental_id | на 1 запись PAYMENT ровно 1 запись RENTAL, rank=10 | |
Связь в STAFF | p.staff_id = s.staff_id | на 1 запись PAYMENT ровно 1 запись STAFF | |
Связь в CITY | Дорожка таблиц: - RENTAL - INVENTORY - STORE - ADDRESS - | на 1 запись PAYMENT любое число записей CITY | |
Связь в ADDRESS | Дорожка таблиц: - RENTAL - INVENTORY - STORE - | на 1 запись PAYMENT любое число записей ADDRESS | |
Связь в COUNTRY | Дорожка таблиц: - RENTAL - INVENTORY - STORE - ADDRESS - CITY - | на 1 запись PAYMENT любое число записей COUNTRY |
Таблица связи FILM_ACTOR (fa) - "игра актёра в фильме"
Ассоциированная таблица: FILM
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Выражение "актерский состав игры актёра в фильме" | count(actor_id) | число | актерский состав|коллектив |
Связь в FILM | fa.film_id = f.film_id | на 1 запись FILM_ACTOR ровно 1 запись FILM | |
Связь в ACTOR | fa.actor_id = a.actor_id | на 1 запись FILM_ACTOR ровно 1 запись ACTOR |
Словарь CATEGORY (ca) - "категория"
Ассоциированная таблица: FILM
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | ca.name | строка | категория
жанр |
Выражение "идентификатор категории" (Key) | ca.category_id | число | идентификатор
id |
Выражение "категория" (Value) | ca.name | строка | название
наименование |
Запись | 1 | число | Боевик
Action приключенческий приключенческое кино блокбастер экшен детектив военный про войну о войне |
Запись | 2 | число | Мультфильм
Animation анимация мультипликационный фильм |
Запись | 3 | число | Детский
Children для детей детское кино |
Запись | 4 | число | Классика
Classics классический класическое кино |
Запись | 5 | число | Комедия
Comedy комедийный комедийное кино смешной |
Запись | 6 | число | Документальный
Documentary документальное кино |
Запись | 7 | число | Драма
Drama драматический драматическое кино мелодрама романтический |
Запись | 8 | число | Семейный
Family семейное кино для семейного просмотра |
Запись | 9 | число | Зарубежный
Foreign заграничный зарубежное|заграничное кино |
Запись | 10 | число | Игровое шоу
Games игровой игровое кино |
Запись | 11 | число | Ужасы
Horror ужастик триллер страшный страшное кино |
Запись | 12 | число | Музыкальный
Music Мюзикл Мьюзикл |
Запись | 13 | число | Новинка
New новостной |
Запись | 14 | число | Фантастика
Sci-Fi фантастический |
Запись | 15 | число | Спорт
Sports спортивный спортивное кино о спорте |
Запись | 16 | число | Путешествия
Travel |
Связь из FILM_CATEGORY | fc.category_id = ca.category_id | на 1 запись CATEGORY любое число записей FILM_CATEGORY |
Таблица связи FILM_CATEGORY (fc)
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Связь в FILM | fc.film_id = f.film_id | на 1 запись FILM_CATEGORY ровно 1 запись FILM | |
Связь в CATEGORY | fc.category_id = ca.category_id | на 1 запись FILM_CATEGORY ровно 1 запись CATEGORY |
Таблица STORE (st) - "склад"
Ассоциированная таблица: FILM
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | select aa.address from ADDRESS aa where aa.address_id = st.address_id | строка | склад
точка проката магазин офис место их? проката|работы |
Выражение "идентификатор склада" (Key) | st.store_id | число | идентификатор
наименование название id |
Условие | not exists (select *
from INVENTORY iv2 join FILM f2 on iv2.film_id = f2.film_id where iv2.store_id = st.store_id) | двоичное | пустой склад|магазин |
Связь из INVENTORY | iv.store_id = st.store_id | на 1 запись STORE любое число записей INVENTORY | |
Связь из STAFF | s.store_id = st.store_id | на 1 запись STORE любое число записей STAFF, rank=10 | работать
место работы |
Связь в ADDRESS | st.address_id = ad.address_id | на 1 запись STORE ровно 1 запись ADDRESS | |
Связь из CUSTOMER | Дорожка таблиц: - RENTAL - INVENTORY - | на 1 запись STORE любое число записей CUSTOMER | |
Связь в STAFF | st.manager_staff_id = s.staff_id | на 1 запись STORE ровно 1 запись STAFF, rank=5 | управляющий|начальник складом|магазином |
Таблица связи INVENTORY (iv) - "фильм на складе"
Где?-таблица: STORE
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Выражение "идентификатор фильма на складе" (Key) | iv.inventory_id | число | идентификатор
id |
Выражение "count(iv.inventory_id)" | count(iv.inventory_id) | число | Min: незагруженный Max: загруженный |
Выражение "фильм" инфо | select ff.title from FILM ff where ff.film_id = iv.film_id | строка | |
Выражение "склад" инфо | select aa.address from ADDRESS aa join STORE stt on aa.address_id = stt.address_id where stt.store_id = iv.store_id | строка | |
Условие | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | двоичное | свободный
для просмотра доступный для? просмотра? доступный для? аренды? |
Связь в FILM | iv.film_id = f.film_id | на 1 запись INVENTORY ровно 1 запись FILM | |
Связь в STORE | iv.store_id = st.store_id | на 1 запись INVENTORY ровно 1 запись STORE | |
Связь из RENTAL | re.inventory_id = iv.inventory_id | на 1 запись INVENTORY ровно 1 запись RENTAL |
Таблица связи RENTAL (re) - "прокат"
Ассоциированная таблица: FILM
Где?-таблица: STORE
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Выражение "дата начала аренды" (DateFrom) инфо | re.rental_date | дата-время | дата начала аренды фильма?
дата дата время дата сдачи|взятия в аренду Min: первый|ранний запись? о? прокат|аренда Max: последний|поздний запись? о? прокат|аренда |
Выражение "дата проката" (DateFrom) | re.rental_date | дата-время | дата Min: ранний|первый клиент|покупатель|раз Max: последний|поздний клиент|покупатель|раз |
Выражение "дата окончания аренды" (DateTo) инфо | re.return_date | дата-время | дата возврата|отдачи|сдачи фильма?
дата окончания аренды фильма? |
Выражение "дата возврата" | re.return_date | дата-время | возвратить|возвращать|вернуть|сдавать|отдавать|отдать|сдать фильм? Min: ранний|первый клиент|покупатель Max: последний|поздний клиент|покупатель |
Выражение "стоимость проката" инфо | select ffi.rental_rate from FILM ffi join INVENTORY iinv on iinv.film_id = ffi.film_id where iinv.inventory_id = re.inventory_id | деньги | стоимость проката |
Выражение "идентификатор проката" (Key) | re.rental_id | число | идентификатор
id |
Выражение "популярность проката" | count(re.rental_id) | число | популярность
рейтинг популярности Min: редкий пассивный низкий рейтинг Max: популярный частый востребованный активный высокий рейтинг |
Выражение "количество дней проката" | [PostgreSql]
date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | число, Day | количество дней на? проката|аренда
прокат|аренда на срок продолжительность|срок проката|аренды |
Выражение "число дней задержки возврата фильма" | [PostgreSql]
date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | число, Day | задержка фильма?
задерживать фильм просрочить|просрочка аренду|возврат фильма? |
Выражение "взять проката" | re.rental_date | дата-время | взять фильм? |
Выражение "дней в аренде" | [PostgreSql]
date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | число, Day | находиться|быть в прокате|аренде
дней в прокате|аренде |
Условие | re.return_date is not null | двоичное | вернуть|возвращать прокатный? фильм
вернуть|возвращать взятый на прокат фильм возвращенный завершенная аренда |
Условие | re.return_date is null | двоичное | незавершенная аренда
не завершить аренду? фильм? аренда у клиента находящийся в прокате|аренде не вернуть прокатный? фильм? активная запись на руках у клиента на руках |
Условие | [PostgreSql]
date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | двоичное | задержка|задерживать при? возвращения|возврата
задерживаться с? возвращение|возврат не возвращать|вернуть вовремя не возвращать|вернуть во время просрочить|просрочка аренду? возврат? фильма? |
Условие | [PostgreSql]
re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | двоичное | истекший срок
срок проката? которых? истек не вернуть|возвращать |
Условие | [PostgreSql]
re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | двоичное | возвращать|вернуть вовремя
возвращать|вернуть во время возвращать|вернуть без задержки |
Условие | [PostgreSql]
re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | двоичное | возвращать|вернуть не вовремя
возвращать|вернуть не во время возвращать|вернуть с задержкой задержать|задерживать при возврате задержка возврата? фильма? не вернуть фильм? вовремя |
Связь в INVENTORY | re.inventory_id = iv.inventory_id | на 1 запись RENTAL ровно 1 запись INVENTORY | |
Связь в CUSTOMER | re.customer_id = c.customer_id | на 1 запись RENTAL ровно 1 запись CUSTOMER, rank=5 | |
Связь из PAYMENT | p.rental_id = re.rental_id | на 1 запись RENTAL любое число записей PAYMENT, rank=10 | |
Связь в STAFF | re.staff_id = s.staff_id | на 1 запись RENTAL ровно 1 запись STAFF |
Таблица STAFF (s) - "сотрудник"
Где?-таблица: STORE
Элемент | SQL | Тип | Лингвистика |
---|---|---|---|
Дефолтовый вывод | concat(s.first_name, ' ', s.last_name) | строка | сотрудник
работник служащий продавец кто давать|продать|продавать|работать люди работает человек |
Выражение "имя сотрудника" (Firstname) инфо | s.first_name | строка | имя
звать |
Выражение "фамилия сотрудника" (Lastname) инфо | s.last_name | строка | фамилия |
Выражение "фио сотрудника" | concat(s.first_name, ' ', s.last_name) | строка | фио
фамилия имя отчество полное имя |
Выражение "идентификатор сотрудника" (Key) | s.staff_id | число | идентификатор
id |
Выражение "начальник сотрудника" (Parent) | s.manager_id | число | начальник
босс руководитель менеджер Max: подчиненный сотрудник? |
Выражение "email сотрудника" инфо | s.email | строка | email
электронная почта электронный адрес адрес электронной почты почта |
Выражение "логин сотрудника" | s.username | строка | логин
никнейм login |
Выражение "пароль сотрудника" | s.password | строка | пароль
password |
Выражение "count(re.rental_id)" | count(re.rental_id) | число | Min: худший сотрудник Max: лучший|эффективный сотрудник |
Условие | s.picture is not null | двоичное | фотография
фото фотокарточка |
Условие | s.active | двоичное | активный
|
Связь в ADDRESS | s.address_id = ad.address_id | на 1 запись STAFF ровно 1 запись ADDRESS | |
Связь в STORE | s.store_id = st.store_id | на 1 запись STAFF ровно 1 запись STORE, rank=10 | работать
место работы |
Связь из PAYMENT | p.staff_id = s.staff_id | на 1 запись STAFF любое число записей PAYMENT | |
Связь в ADDRESS | Дорожка таблиц: - STORE - | на 1 запись STAFF любое число записей ADDRESS | работать по адресу |
Связь из RENTAL | re.staff_id = s.staff_id | на 1 запись STAFF любое число записей RENTAL | |
Связь в CUSTOMER | Дорожка таблиц: - RENTAL - | на 1 запись STAFF любое число записей CUSTOMER | |
Связь из STORE | st.manager_staff_id = s.staff_id | на 1 запись STAFF любое число записей STORE, rank=5 | управляющий|начальник складом|магазином |
Индекс словосочетаний
Лингвокомбинация | ЭлементSQL | ТаблицаТип |
---|---|---|
16 плюс | f.rating = 'NC-17' | FILM |
17 плюс | f.rating = 'NC-17' | FILM |
18 плюс | f.rating = 'NC-17' | FILM |
action | 1 | CATEGORY |
animation | 2 | CATEGORY |
children | 3 | CATEGORY |
classics | 4 | CATEGORY |
comedy | 5 | CATEGORY |
documentary | 6 | CATEGORY |
drama | 7 | CATEGORY |
c.email | CUSTOMER | |
s.email | STAFF | |
english | 7 | LANGUAGE |
family | 8 | CATEGORY |
foreign | 9 | CATEGORY |
french | 5 | LANGUAGE |
games | 10 | CATEGORY |
german | 6 | LANGUAGE |
horror | 11 | CATEGORY |
id | c.customer_id | CUSTOMER |
f.film_id | FILM | |
a.actor_id | ACTOR | |
co.country_id | COUNTRY | |
ci.city_id | CITY | |
ad.address_id | ADDRESS | |
la.language_id | LANGUAGE | |
p.payment_id | PAYMENT | |
ca.category_id | CATEGORY | |
st.store_id | STORE | |
iv.inventory_id | INVENTORY | |
re.rental_id | RENTAL | |
s.staff_id | STAFF | |
italian | 2 | LANGUAGE |
japanese | 3 | LANGUAGE |
login | s.username | STAFF |
mandarin | 4 | LANGUAGE |
music | 12 | CATEGORY |
new | 13 | CATEGORY |
password | s.password | STAFF |
russian | 1 | LANGUAGE |
sci fi | 14 | CATEGORY |
sports | 15 | CATEGORY |
travel | 16 | CATEGORY |
адрес | ad.address | ADDRESS |
адрес электронной почты | c.email | CUSTOMER |
s.email | STAFF | |
актер | concat(a.first_name, ' ', a.last_name) | ACTOR |
актерский коллектив | count(actor_id) | FILM_ACTOR |
актерский состав | count(actor_id) | FILM_ACTOR |
активная запись | re.return_date is null | RENTAL |
активный | c.active = 1 | CUSTOMER |
s.active | STAFF | |
актриса | concat(a.first_name, ' ', a.last_name) | ACTOR |
американский | 7 | LANGUAGE |
английский | 7 | LANGUAGE |
анимация | 2 | CATEGORY |
аренда на срок | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
аренда у клиента | re.return_date is null | RENTAL |
арендатор | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
арендная стоимость | f.rental_rate | FILM |
арендная цена | f.rental_rate | FILM |
артист | concat(a.first_name, ' ', a.last_name) | ACTOR |
артистка | concat(a.first_name, ' ', a.last_name) | ACTOR |
атрибут | f.special_features | FILM |
без возрастных ограничений | f.rating = 'G' | FILM |
без ограничений | f.rating = 'G' | FILM |
без ограничения возраста | f.rating = 'G' | FILM |
блокбастер | f.title | FILM |
1 | CATEGORY | |
боевик | 1 | CATEGORY |
босс | s.manager_id | STAFF |
быть в аренде | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
быть в прокате | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
величина заработка | sum(p.amount) | PAYMENT |
величина оплаты | p.amount | PAYMENT |
величина платежа | p.amount | PAYMENT |
величина платежей | sum(p.amount) | PAYMENT |
вернуть | re.return_date | RENTAL |
вернуть без задержки | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
вернуть взятый на прокат фильм | re.return_date is not null | RENTAL |
вернуть во время | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
вернуть вовремя | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
вернуть не во время | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
вернуть не вовремя | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
вернуть прокатный фильм | re.return_date is not null | RENTAL |
вернуть с задержкой | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
вернуть фильм | re.return_date | RENTAL |
re.return_date is not null | RENTAL | |
взять | re.rental_date | RENTAL |
взять фильм | re.rental_date | RENTAL |
военный | 1 | CATEGORY |
возвратить | re.return_date | RENTAL |
возвратить фильм | re.return_date | RENTAL |
возвращать | re.return_date | RENTAL |
возвращать без задержки | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
возвращать взятый на прокат фильм | re.return_date is not null | RENTAL |
возвращать во время | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
возвращать вовремя | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) <= f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) <= f.rental_duration | RENTAL |
возвращать не во время | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
возвращать не вовремя | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
возвращать прокатный фильм | re.return_date is not null | RENTAL |
возвращать с задержкой | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
возвращать фильм | re.return_date | RENTAL |
re.return_date is not null | RENTAL | |
возвращенный | re.return_date is not null | RENTAL |
возрастное ограничение | f.rating | FILM |
возрастное ограничение 16 | f.rating = 'NC-17' | FILM |
возрастное ограничение 16 лет | f.rating = 'NC-17' | FILM |
возрастное ограничение 17 | f.rating = 'NC-17' | FILM |
возрастное ограничение 17 лет | f.rating = 'NC-17' | FILM |
возрастное ограничение 18 | f.rating = 'NC-17' | FILM |
возрастное ограничение 18 лет | f.rating = 'NC-17' | FILM |
возрастное ограничение от 16 | f.rating = 'NC-17' | FILM |
возрастное ограничение от 16 лет | f.rating = 'NC-17' | FILM |
возрастное ограничение от 17 | f.rating = 'NC-17' | FILM |
возрастное ограничение от 17 лет | f.rating = 'NC-17' | FILM |
возрастное ограничение от 18 | f.rating = 'NC-17' | FILM |
возрастное ограничение от 18 лет | f.rating = 'NC-17' | FILM |
возрастной рейтинг | f.rating | FILM |
возрастной рейтинг 16 | f.rating = 'NC-17' | FILM |
возрастной рейтинг 16 плюс | f.rating = 'NC-17' | FILM |
возрастной рейтинг 17 | f.rating = 'NC-17' | FILM |
возрастной рейтинг 17 плюс | f.rating = 'NC-17' | FILM |
возрастной рейтинг 18 | f.rating = 'NC-17' | FILM |
возрастной рейтинг 18 плюс | f.rating = 'NC-17' | FILM |
возрастной рейтинг для взрослых | f.rating = 'NC-17' | FILM |
возрастной рейтинг для детей | f.rating != 'NC-17' | FILM |
возрастной рейтинг не для детей | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 16 | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 16 плюс | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 17 | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 17 плюс | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 18 | f.rating = 'NC-17' | FILM |
возрастной рейтинг от 18 плюс | f.rating = 'NC-17' | FILM |
выпуска | f.release_year | FILM |
выпустить | f.release_year | FILM |
выручка | sum(p.amount) | PAYMENT |
выручка от аренды | sum(p.amount) | PAYMENT |
выручка от проката | sum(p.amount) | PAYMENT |
выход | f.release_year | FILM |
вышедший | f.release_year | FILM |
германский | 6 | LANGUAGE |
год выпуска | f.release_year | FILM |
год выпуска фильма | f.release_year | FILM |
год выхода | f.release_year | FILM |
год выхода фильма | f.release_year | FILM |
год создания | f.release_year | FILM |
год создания фильма | f.release_year | FILM |
город | ci.city | CITY |
государство | co.country | COUNTRY |
дата | p.payment_date | PAYMENT |
re.rental_date | RENTAL | |
re.rental_date | RENTAL | |
дата взятия в аренду | re.rental_date | RENTAL |
дата возврата | re.return_date | RENTAL |
дата возврата фильма | re.return_date | RENTAL |
дата время | p.payment_date | PAYMENT |
re.rental_date | RENTAL | |
дата выпуска | f.release_year | FILM |
дата выпуска фильма | f.release_year | FILM |
дата выхода | f.release_year | FILM |
дата выхода фильма | f.release_year | FILM |
дата начала аренды | re.rental_date | RENTAL |
дата начала аренды фильма | re.rental_date | RENTAL |
дата окончания аренды | re.return_date | RENTAL |
дата окончания аренды фильма | re.return_date | RENTAL |
дата отдачи | re.return_date | RENTAL |
дата отдачи фильма | re.return_date | RENTAL |
дата прихода | select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id | CUSTOMER |
дата сдачи | re.return_date | RENTAL |
дата сдачи в аренду | re.rental_date | RENTAL |
дата сдачи фильма | re.return_date | RENTAL |
дата создания | f.release_year | FILM |
p.payment_date | PAYMENT | |
дата создания фильма | f.release_year | FILM |
детектив | 1 | CATEGORY |
детский | 3 | CATEGORY |
детский рейтинг | f.rating != 'NC-17' | FILM |
f.rating = 'PG' | FILM | |
детское кино | 3 | CATEGORY |
длительность | f.length | FILM |
для взрослых | f.rating = 'NC-17' | FILM |
для детей | 3 | CATEGORY |
для любого возраста | f.rating = 'G' | FILM |
для просмотра | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
для семейного просмотра | 8 | CATEGORY |
дней в аренде | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
дней в прокате | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
до 16 лет | f.rating != 'NC-17' | FILM |
до 16 плюс | f.rating != 'NC-17' | FILM |
до 18 лет | f.rating != 'NC-17' | FILM |
до 18 плюс | f.rating != 'NC-17' | FILM |
документальное кино | 6 | CATEGORY |
документальный | 6 | CATEGORY |
дополнительные материалы | f.special_features | FILM |
доступный | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
доступный аренды | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
доступный для | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
доступный для аренды | exists (select * from INVENTORY iv where iv.film_id = f.film_id and not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null )) | FILM |
not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY | |
доступный для аренды фильм | exists (select * from INVENTORY iv where iv.film_id = f.film_id and not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null )) | FILM |
доступный для проката | exists (select * from INVENTORY iv where iv.film_id = f.film_id and not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null )) | FILM |
доступный для проката фильм | exists (select * from INVENTORY iv where iv.film_id = f.film_id and not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null )) | FILM |
доступный для просмотра | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
доступный просмотра | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
доход | sum(p.amount) | PAYMENT |
доход от аренды | sum(p.amount) | PAYMENT |
доход от проката | sum(p.amount) | PAYMENT |
доход сдачи в аренду | sum(p.amount) | PAYMENT |
драма | 7 | CATEGORY |
драматический | 7 | CATEGORY |
драматическое кино | 7 | CATEGORY |
жанр | ca.name | CATEGORY |
житель москвы | ci.city = 'Москва' | CITY |
жить персонал | exists (select * from STAFF s2 where s2.address_id = ad.address_id) | ADDRESS |
жить сотрудники | exists (select * from STAFF s2 where s2.address_id = ad.address_id) | ADDRESS |
завершенная аренда | re.return_date is not null | RENTAL |
заграничное кино | 9 | CATEGORY |
заграничный | 9 | CATEGORY |
задержать при возврате | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
задерживать возврата | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживать возвращения | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживать при возврата | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживать при возврате | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
задерживать при возвращения | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживать фильм | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
задерживаться возврат | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживаться возвращение | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживаться с возврат | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задерживаться с возвращение | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задержка | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL | |
задержка возврата | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
[PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL | |
задержка возврата фильма | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
задержка возвращения | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задержка при возврата | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задержка при возвращения | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
задержка фильма | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL | |
закадровые сцены | [PostgreSql] array_to_string(f.special_features,',') like '%ЗакадровыеСцены%' [Any] f.special_features like '%Deleted Scenes%' | FILM |
залоговая стоимость | f.replacement_cost | FILM |
залоговая цена | f.replacement_cost | FILM |
заплатить | p.amount | PAYMENT |
заплатить аренда | p.amount | PAYMENT |
заплатить аренда фильма | p.amount | PAYMENT |
заплатить за | p.amount | PAYMENT |
заплатить за аренда | p.amount | PAYMENT |
заплатить за аренда фильма | p.amount | PAYMENT |
заплатить за фильма | p.amount | PAYMENT |
заплатить фильма | p.amount | PAYMENT |
зарубежное кино | 9 | CATEGORY |
зарубежный | 9 | CATEGORY |
звать | c.first_name | CUSTOMER |
a.first_name | ACTOR | |
s.first_name | STAFF | |
игровое кино | 10 | CATEGORY |
игровое шоу | 10 | CATEGORY |
игровой | 10 | CATEGORY |
идентификатор | c.customer_id | CUSTOMER |
f.film_id | FILM | |
a.actor_id | ACTOR | |
co.country_id | COUNTRY | |
ci.city_id | CITY | |
ad.address_id | ADDRESS | |
la.language_id | LANGUAGE | |
p.payment_id | PAYMENT | |
ca.category_id | CATEGORY | |
st.store_id | STORE | |
iv.inventory_id | INVENTORY | |
re.rental_id | RENTAL | |
s.staff_id | STAFF | |
идти | f.length | FILM |
идущий | f.length | FILM |
имя | c.first_name | CUSTOMER |
f.title | FILM | |
a.first_name | ACTOR | |
co.country | COUNTRY | |
ci.city | CITY | |
s.first_name | STAFF | |
индекс | ad.postal_code | ADDRESS |
истекший срок | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
итальянский | 2 | LANGUAGE |
итог сдачи в аренду | sum(p.amount) | PAYMENT |
категория | ca.name | CATEGORY |
киноактер | concat(a.first_name, ' ', a.last_name) | ACTOR |
киноактриса | concat(a.first_name, ' ', a.last_name) | ACTOR |
кинозвезда | concat(a.first_name, ' ', a.last_name) | ACTOR |
китайский | 4 | LANGUAGE |
класическое кино | 4 | CATEGORY |
классика | 4 | CATEGORY |
классический | 4 | CATEGORY |
клиент | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
количество дней аренда | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
количество дней на аренда | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
количество дней на проката | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
количество дней проката | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
комедийное кино | 5 | CATEGORY |
комедийный | 5 | CATEGORY |
комедия | 5 | CATEGORY |
краткое содержание | f.description | FILM |
кто арендовал | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
кто брал | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
кто вернул | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
кто давать | concat(s.first_name, ' ', s.last_name) | STAFF |
кто играл | concat(a.first_name, ' ', a.last_name) | ACTOR |
кто продавать | concat(s.first_name, ' ', s.last_name) | STAFF |
кто продать | concat(s.first_name, ' ', s.last_name) | STAFF |
кто просрочил | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
кто работать | concat(s.first_name, ' ', s.last_name) | STAFF |
кто участвовал | concat(a.first_name, ' ', a.last_name) | ACTOR |
купить | p.amount | PAYMENT |
логин | s.username | STAFF |
люди | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
concat(s.first_name, ' ', s.last_name) | STAFF | |
магазин | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
максимально возможный срок проката | f.rental_duration | FILM |
мелодрама | 7 | CATEGORY |
менеджер | s.manager_id | STAFF |
менее 16 лет | f.rating != 'NC-17' | FILM |
менее 16 плюс | f.rating != 'NC-17' | FILM |
менее 18 лет | f.rating != 'NC-17' | FILM |
менее 18 плюс | f.rating != 'NC-17' | FILM |
место их проката | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
место их работы | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
место проката | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
место работы | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
s.store_id = st.store_id | STAFF | |
москвич | ci.city = 'Москва' | CITY |
музыкальный | 12 | CATEGORY |
мультипликационный фильм | 2 | CATEGORY |
мультфильм | 2 | CATEGORY |
мьюзикл | 12 | CATEGORY |
мюзикл | 12 | CATEGORY |
на руках | re.return_date is null | RENTAL |
на руках у клиента | re.return_date is null | RENTAL |
название | f.title | FILM |
co.country | COUNTRY | |
ci.city | CITY | |
la.name | LANGUAGE | |
ca.name | CATEGORY | |
st.store_id | STORE | |
наименование | f.title | FILM |
co.country | COUNTRY | |
ci.city | CITY | |
ca.name | CATEGORY | |
st.store_id | STORE | |
населенный пункт | ci.city | CITY |
находиться в аренде | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
находиться в прокате | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) | RENTAL |
находящийся в аренде | re.return_date is null | RENTAL |
находящийся в прокате | re.return_date is null | RENTAL |
начальник | s.manager_id | STAFF |
начальник магазином | st.manager_staff_id = s.staff_id | STORE |
начальник складом | st.manager_staff_id = s.staff_id | STORE |
не вернуть | re.return_date is null | RENTAL |
[PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL | |
не вернуть во время | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
не вернуть вовремя | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
[PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL | |
не вернуть прокатный | re.return_date is null | RENTAL |
не вернуть прокатный фильм | re.return_date is null | RENTAL |
не вернуть фильм | re.return_date is null | RENTAL |
не вернуть фильм вовремя | [PostgreSql] re.return_date is not null and date_part('day', re.return_date - re.rental_date) > f.rental_duration [Any] re.return_date is not null and datediff(re.return_date, re.rental_date) > f.rental_duration | RENTAL |
не возвращать | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
не возвращать во время | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
не возвращать вовремя | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
не завершить | re.return_date is null | RENTAL |
не завершить аренду | re.return_date is null | RENTAL |
не завершить аренду фильм | re.return_date is null | RENTAL |
не завершить фильм | re.return_date is null | RENTAL |
незавершенная аренда | re.return_date is null | RENTAL |
немецкий | 6 | LANGUAGE |
ниже 16 лет | f.rating != 'NC-17' | FILM |
ниже 16 плюс | f.rating != 'NC-17' | FILM |
ниже 18 лет | f.rating != 'NC-17' | FILM |
ниже 18 плюс | f.rating != 'NC-17' | FILM |
никнейм | s.username | STAFF |
новинка | 13 | CATEGORY |
новостной | 13 | CATEGORY |
новый клиент | select min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_id | CUSTOMER |
номер телефона | ad.phone | ADDRESS |
о войне | 1 | CATEGORY |
о спорте | 15 | CATEGORY |
ограничение 16 | f.rating = 'NC-17' | FILM |
ограничение 16 лет | f.rating = 'NC-17' | FILM |
ограничение 17 | f.rating = 'NC-17' | FILM |
ограничение 17 лет | f.rating = 'NC-17' | FILM |
ограничение 18 | f.rating = 'NC-17' | FILM |
ограничение 18 лет | f.rating = 'NC-17' | FILM |
ограничение от 16 | f.rating = 'NC-17' | FILM |
ограничение от 16 лет | f.rating = 'NC-17' | FILM |
ограничение от 17 | f.rating = 'NC-17' | FILM |
ограничение от 17 лет | f.rating = 'NC-17' | FILM |
ограничение от 18 | f.rating = 'NC-17' | FILM |
ограничение от 18 лет | f.rating = 'NC-17' | FILM |
описание | f.description | FILM |
оплата | p.amount | PAYMENT |
p.amount | PAYMENT | |
оплата аренда | p.amount | PAYMENT |
оплата аренда фильма | p.amount | PAYMENT |
оплата фильма | p.amount | PAYMENT |
оплатить | p.amount | PAYMENT |
оплатить аренда | p.amount | PAYMENT |
оплатить аренда фильма | p.amount | PAYMENT |
оплатить фильма | p.amount | PAYMENT |
оплачивать | p.amount | PAYMENT |
оплачивать аренда | p.amount | PAYMENT |
оплачивать аренда фильма | p.amount | PAYMENT |
оплачивать фильма | p.amount | PAYMENT |
от 16 лет | f.rating = 'NC-17' | FILM |
от 17 лет | f.rating = 'NC-17' | FILM |
от 18 лет | f.rating = 'NC-17' | FILM |
отдавать | re.return_date | RENTAL |
отдавать фильм | re.return_date | RENTAL |
отдать | re.return_date | RENTAL |
отдать фильм | re.return_date | RENTAL |
офис | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
пароль | s.password | STAFF |
перевод | la.name | LANGUAGE |
плата | p.amount | PAYMENT |
плата аренда | p.amount | PAYMENT |
плата аренда фильма | p.amount | PAYMENT |
плата фильма | p.amount | PAYMENT |
платеж | p.amount | PAYMENT |
платеж аренда | p.amount | PAYMENT |
платеж аренда фильма | p.amount | PAYMENT |
платеж фильма | p.amount | PAYMENT |
платежный срок | [PostgreSql] date_part('day', p.payment_date - re.rental_date) [Any] datediff(p.payment_date, re.rental_date) | PAYMENT |
платить | p.amount | PAYMENT |
платить аренда | p.amount | PAYMENT |
платить аренда фильма | p.amount | PAYMENT |
платить за | p.amount | PAYMENT |
платить за аренда | p.amount | PAYMENT |
платить за аренда фильма | p.amount | PAYMENT |
платить за фильма | p.amount | PAYMENT |
платить фильма | p.amount | PAYMENT |
покупатель | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
покупка | p.amount | PAYMENT |
полное имя | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
concat(a.first_name, ' ', a.last_name) | ACTOR | |
concat(s.first_name, ' ', s.last_name) | STAFF | |
популярность | count(re.rental_id) | RENTAL |
потратить | sum(p.amount) | PAYMENT |
потраченная деньги | sum(p.amount) | PAYMENT |
потраченная сумма | sum(p.amount) | PAYMENT |
почта | c.email | CUSTOMER |
s.email | STAFF | |
почтовый индекс | ad.postal_code | ADDRESS |
прибыль | sum(p.amount) | PAYMENT |
прибыль от аренды | sum(p.amount) | PAYMENT |
прибыль от проката | sum(p.amount) | PAYMENT |
приключенческий | 1 | CATEGORY |
приключенческое кино | 1 | CATEGORY |
про войну | 1 | CATEGORY |
продавец | concat(s.first_name, ' ', s.last_name) | STAFF |
продолжительность | f.length | FILM |
продолжительность аренды | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
продолжительность проката | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
проживать персонал | exists (select * from STAFF s2 where s2.address_id = ad.address_id) | ADDRESS |
проживать сотрудники | exists (select * from STAFF s2 where s2.address_id = ad.address_id) | ADDRESS |
проживающий в москве | ci.city = 'Москва' | CITY |
прокат на срок | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
прокатный фильм | f.title | FILM |
просрочить | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочить аренду | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочить аренду возврат | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочить аренду возврат фильма | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочить аренду фильма | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочить возврат | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочить возврат фильма | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочить фильма | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочка | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочка аренду | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочка аренду возврат | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочка аренду возврат фильма | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
просрочка аренду фильма | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочка возврат | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочка возврат фильма | [PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_duration | RENTAL |
[PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL | |
просрочка фильма | [PostgreSql] date_part('day', COALESCE(re.return_date, CURRENT_TIMESTAMP) - re.rental_date) > f.rental_duration [Any] datediff(COALESCE(re.return_date, CURRENT_TIMESTAMP), re.rental_date) > f.rental_duration | RENTAL |
пустой магазин | not exists (select * from INVENTORY iv2 join FILM f2 on iv2.film_id = f2.film_id where iv2.store_id = st.store_id) | STORE |
пустой склад | not exists (select * from INVENTORY iv2 join FILM f2 on iv2.film_id = f2.film_id where iv2.store_id = st.store_id) | STORE |
путешествия | 16 | CATEGORY |
работает человек | concat(s.first_name, ' ', s.last_name) | STAFF |
работать | s.store_id = st.store_id | STAFF |
работать по адресу | STAFF | |
работник | concat(s.first_name, ' ', s.last_name) | STAFF |
размер оплаты | p.amount | PAYMENT |
размер платежа | p.amount | PAYMENT |
район | ad.district | ADDRESS |
регион | ad.district | ADDRESS |
рейтинг | f.rating | FILM |
рейтинг 16 | f.rating = 'NC-17' | FILM |
рейтинг 16 плюс | f.rating = 'NC-17' | FILM |
рейтинг 17 | f.rating = 'NC-17' | FILM |
рейтинг 17 плюс | f.rating = 'NC-17' | FILM |
рейтинг 18 | f.rating = 'NC-17' | FILM |
рейтинг 18 плюс | f.rating = 'NC-17' | FILM |
рейтинг nc17 | f.rating = 'NC-17' | FILM |
рейтинг для взрослых | f.rating = 'NC-17' | FILM |
рейтинг для детей | f.rating != 'NC-17' | FILM |
f.rating = 'PG' | FILM | |
рейтинг не для детей | f.rating = 'NC-17' | FILM |
рейтинг от 16 | f.rating = 'NC-17' | FILM |
рейтинг от 16 плюс | f.rating = 'NC-17' | FILM |
рейтинг от 17 | f.rating = 'NC-17' | FILM |
рейтинг от 17 плюс | f.rating = 'NC-17' | FILM |
рейтинг от 18 | f.rating = 'NC-17' | FILM |
рейтинг от 18 плюс | f.rating = 'NC-17' | FILM |
рейтинг популярности | count(re.rental_id) | RENTAL |
романтический | 7 | CATEGORY |
руководитель | s.manager_id | STAFF |
русский | 1 | LANGUAGE |
с 16 лет | f.rating = 'NC-17' | FILM |
с 17 лет | f.rating = 'NC-17' | FILM |
с 18 лет | f.rating = 'NC-17' | FILM |
сбор | sum(p.amount) | PAYMENT |
сбор денег | sum(p.amount) | PAYMENT |
свободный | not exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null) | INVENTORY |
сдавать | re.return_date | RENTAL |
сдавать фильм | re.return_date | RENTAL |
сдать | re.return_date | RENTAL |
сдать фильм | re.return_date | RENTAL |
семейное кино | 8 | CATEGORY |
семейный | 8 | CATEGORY |
склад | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
сколько денег | sum(p.amount) | PAYMENT |
сколько стоит | f.rental_rate | FILM |
сколько стоит аренда | f.rental_rate | FILM |
сколько стоит аренда арендовать | f.rental_rate | FILM |
сколько стоит аренда прокат | f.rental_rate | FILM |
сколько стоит аренда прокат арендовать | f.rental_rate | FILM |
сколько стоит арендовать | f.rental_rate | FILM |
сколько стоит прокат | f.rental_rate | FILM |
сколько стоит прокат арендовать | f.rental_rate | FILM |
служащий | concat(s.first_name, ' ', s.last_name) | STAFF |
смешной | 5 | CATEGORY |
снимавшихся | f.release_year | FILM |
снятый | f.release_year | FILM |
собрать денег | sum(p.amount) | PAYMENT |
сотрудник | concat(s.first_name, ' ', s.last_name) | STAFF |
специальный атрибут | f.special_features | FILM |
спорт | 15 | CATEGORY |
спортивное кино | 15 | CATEGORY |
спортивный | 15 | CATEGORY |
срок аренды | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
срок возврата | f.rental_duration | FILM |
срок истек | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
срок которых истек | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
срок платежа | [PostgreSql] date_part('day', p.payment_date - re.rental_date) [Any] datediff(p.payment_date, re.rental_date) | PAYMENT |
срок проката | [PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date) | RENTAL |
срок проката истек | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
срок проката которых истек | [PostgreSql] re.return_date is null and date_part('day', CURRENT_TIMESTAMP - re.rental_date) > f.rental_duration [Any] re.return_date is null and datediff(CURRENT_TIMESTAMP(), re.rental_date) > f.rental_duration | RENTAL |
стоимость | f.rental_rate | FILM |
стоимость аренды | f.rental_rate | FILM |
стоимость возмещения | f.replacement_cost | FILM |
стоимость возмещения в | f.replacement_cost | FILM |
стоимость возмещения в случае | f.replacement_cost | FILM |
стоимость возмещения в случае утраты | f.replacement_cost | FILM |
стоимость возмещения в утраты | f.replacement_cost | FILM |
стоимость возмещения случае | f.replacement_cost | FILM |
стоимость возмещения случае утраты | f.replacement_cost | FILM |
стоимость возмещения утраты | f.replacement_cost | FILM |
стоимость залога | f.replacement_cost | FILM |
стоимость залога в | f.replacement_cost | FILM |
стоимость залога в случае | f.replacement_cost | FILM |
стоимость залога в случае утраты | f.replacement_cost | FILM |
стоимость залога в утраты | f.replacement_cost | FILM |
стоимость залога случае | f.replacement_cost | FILM |
стоимость залога случае утраты | f.replacement_cost | FILM |
стоимость залога утраты | f.replacement_cost | FILM |
стоимость на аренду | f.rental_rate | FILM |
стоимость проката | f.rental_rate | FILM |
select ffi.rental_rate from FILM ffi join INVENTORY iinv on iinv.film_id = ffi.film_id where iinv.inventory_id = re.inventory_id | RENTAL | |
страна | co.country | COUNTRY |
страшное кино | 11 | CATEGORY |
страшный | 11 | CATEGORY |
сумма выручки | sum(p.amount) | PAYMENT |
сумма выручки аренды | sum(p.amount) | PAYMENT |
сумма выручки проката | sum(p.amount) | PAYMENT |
сумма выручки с | sum(p.amount) | PAYMENT |
сумма выручки с аренды | sum(p.amount) | PAYMENT |
сумма выручки с проката | sum(p.amount) | PAYMENT |
сумма дохода | sum(p.amount) | PAYMENT |
сумма дохода аренды | sum(p.amount) | PAYMENT |
сумма дохода проката | sum(p.amount) | PAYMENT |
сумма дохода с | sum(p.amount) | PAYMENT |
сумма дохода с аренды | sum(p.amount) | PAYMENT |
сумма дохода с проката | sum(p.amount) | PAYMENT |
сумма заработка | sum(p.amount) | PAYMENT |
сумма платежа | p.amount | PAYMENT |
сумма платежей | sum(p.amount) | PAYMENT |
сумма прибыли | sum(p.amount) | PAYMENT |
сумма прибыли аренды | sum(p.amount) | PAYMENT |
сумма прибыли проката | sum(p.amount) | PAYMENT |
сумма прибыли с | sum(p.amount) | PAYMENT |
сумма прибыли с аренды | sum(p.amount) | PAYMENT |
сумма прибыли с проката | sum(p.amount) | PAYMENT |
сюжет | f.description | FILM |
телефон | ad.phone | ADDRESS |
точка проката | select aa.address from ADDRESS aa where aa.address_id = st.address_id | STORE |
трейлер | [PostgreSql] array_to_string(f.special_features,',') like '%Трейлеры%' [Any] f.special_features like '%Trailers%' | FILM |
триллер | 11 | CATEGORY |
удаленные сцены | [PostgreSql] array_to_string(f.special_features,',') like '%УдаленныеСцены%' [Any] f.special_features like '%Deleted Scenes%' | FILM |
ужастик | 11 | CATEGORY |
ужасы | 11 | CATEGORY |
управляющий магазином | st.manager_staff_id = s.staff_id | STORE |
управляющий складом | st.manager_staff_id = s.staff_id | STORE |
фамилия | c.last_name | CUSTOMER |
a.last_name | ACTOR | |
s.last_name | STAFF | |
фамилия имя отчество | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
concat(a.first_name, ' ', a.last_name) | ACTOR | |
concat(s.first_name, ' ', s.last_name) | STAFF | |
фантастика | 14 | CATEGORY |
фантастический | 14 | CATEGORY |
фильм | f.title | FILM |
фио | concat(c.first_name, ' ', c.last_name) | CUSTOMER |
concat(a.first_name, ' ', a.last_name) | ACTOR | |
concat(s.first_name, ' ', s.last_name) | STAFF | |
фото | s.picture is not null | STAFF |
фотография | s.picture is not null | STAFF |
фотокарточка | s.picture is not null | STAFF |
французский | 5 | LANGUAGE |
художественный фильм | f.title | FILM |
цена | f.rental_rate | FILM |
цена аренды | f.rental_rate | FILM |
цена возмещения | f.replacement_cost | FILM |
цена возмещения в | f.replacement_cost | FILM |
цена возмещения в случае | f.replacement_cost | FILM |
цена возмещения в случае утраты | f.replacement_cost | FILM |
цена возмещения в утраты | f.replacement_cost | FILM |
цена возмещения случае | f.replacement_cost | FILM |
цена возмещения случае утраты | f.replacement_cost | FILM |
цена возмещения утраты | f.replacement_cost | FILM |
цена залога | f.replacement_cost | FILM |
цена залога в | f.replacement_cost | FILM |
цена залога в случае | f.replacement_cost | FILM |
цена залога в случае утраты | f.replacement_cost | FILM |
цена залога в утраты | f.replacement_cost | FILM |
цена залога случае | f.replacement_cost | FILM |
цена залога случае утраты | f.replacement_cost | FILM |
цена залога утраты | f.replacement_cost | FILM |
цена на аренду | f.rental_rate | FILM |
цена проката | f.rental_rate | FILM |
штраф | f.replacement_cost | FILM |
штраф за утрату | f.replacement_cost | FILM |
штраф утраты | f.replacement_cost | FILM |
экшен | 1 | CATEGORY |
электронная почта | c.email | CUSTOMER |
s.email | STAFF | |
электронный адрес | c.email | CUSTOMER |
s.email | STAFF | |
язык | la.name | LANGUAGE |
язык озвучки | la.name | LANGUAGE |
язык фильма | la.name | LANGUAGE |
японский | 3 | LANGUAGE |