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

Задайте запрос к БД (в рамках того, что умеется распознавать движок). Текст можно набрать вручную, а можно голосом микрофон не поддержан. Если распознаватель голоса не работает, то попробуйте отсюда.
Уточняющие тексты отделяются от основного текста тремя знаками равенства подряд (===). Лингво-настройка на БД и примеры запросов см. ниже.






Примеры генерации Sql


 1. Одна таблица

Пример №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 1select 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

ФрагментИнтерпретация
Вывести список игнор
фильмов фильм
с возрастным рейтингом 1818 плюс фильма
, игнор
длительностью продолжительность фильма - ]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. Несколько таблиц

Пример №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 1select 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 1select 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. Группировка и агрегатные функции

Пример №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, 1select 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. Min\Max

Пример №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 1select 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. Условие

Пример №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(фильм)
комедий идентификатор категории - равно Комедия
с актеров актер
участием игра актёра в фильме
больше 2count(игра актёра в фильме) 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. Использование limits

Пример №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 50select 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. Иерархия

Пример №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. Exist - Not Exist

Пример №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 1select 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 1select 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. Подзапросы в FROM

Пример №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 1select 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 1select 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. Агрегатные функции без группировки

Пример №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
фильм игнор
с возрастным рейтингом 1818 плюс фильма


Пример №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. Экзотика

Пример №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двоичноеактивный
Связь в ADDRESSc.address_id = ad.address_idна 1 запись CUSTOMER
ровно 1 запись ADDRESS
 
Связь из PAYMENTp.customer_id = c.customer_idна 1 запись CUSTOMER
любое число записей PAYMENT
 
Связь из RENTALre.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%'
двоичноезакадровые сцены
Связь в LANGUAGEf.language_id = la.language_idна 1 запись FILM
ровно 1 запись LANGUAGE
 
Связь из FILM_ACTORfa.film_id = f.film_idна 1 запись FILM
любое число записей FILM_ACTOR
 
Связь из FILM_CATEGORYfc.film_id = f.film_idна 1 запись FILM
любое число записей FILM_CATEGORY
 
Связь из INVENTORYiv.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_ACTORfa.actor_id = a.actor_idна 1 запись ACTOR
любое число записей FILM_ACTOR
 

Словарь COUNTRY (co) - "страна"

ЭлементSQLТипЛингвистика
Дефолтовый выводco.countryстрокастрана
государство
Выражение "название страны" (Geo)co.countryлингво-строканазвание
наименование
имя
Выражение "идентификатор страны" (Key)co.country_idчислоидентификатор
id
Связь из CITYci.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 = 'Москва'двоичноежитель Москвы
москвич
проживающий в Москве
Связь в COUNTRYci.country_id = co.country_idна 1 запись CITY
ровно 1 запись COUNTRY
 
Связь из ADDRESSad.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)двоичноежить|проживать персонал|сотрудники
Связь в CITYad.city_id = ci.city_idна 1 запись ADDRESS
ровно 1 запись CITY
 
Связь из CUSTOMERc.address_id = ad.address_idна 1 запись ADDRESS
любое число записей CUSTOMER
 
Связь из STAFFs.address_id = ad.address_idна 1 запись ADDRESS
любое число записей STAFF
 
Связь из STOREst.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
Связь из FILMf.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срок платежа
платежный срок
Связь в CUSTOMERp.customer_id = c.customer_idна 1 запись PAYMENT
ровно 1 запись CUSTOMER
 
Связь в RENTALp.rental_id = re.rental_idна 1 запись PAYMENT
ровно 1 запись RENTAL, rank=10
 
Связь в STAFFp.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)числоактерский состав|коллектив
Связь в FILMfa.film_id = f.film_idна 1 запись FILM_ACTOR
ровно 1 запись FILM
 
Связь в ACTORfa.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_CATEGORYfc.category_id = ca.category_idна 1 запись CATEGORY
любое число записей FILM_CATEGORY
 

Таблица связи FILM_CATEGORY (fc)

ЭлементSQLТипЛингвистика
Связь в FILMfc.film_id = f.film_idна 1 запись FILM_CATEGORY
ровно 1 запись FILM
 
Связь в CATEGORYfc.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)
двоичноепустой склад|магазин
Связь из INVENTORYiv.store_id = st.store_idна 1 запись STORE
любое число записей INVENTORY
 
Связь из STAFFs.store_id = st.store_idна 1 запись STORE
любое число записей STAFF, rank=10
работать
место работы
Связь в ADDRESSst.address_id = ad.address_idна 1 запись STORE
ровно 1 запись ADDRESS
 
Связь из CUSTOMERДорожка таблиц: - RENTAL - INVENTORY -на 1 запись STORE
любое число записей CUSTOMER
 
Связь в STAFFst.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)двоичноесвободный
для просмотра
доступный для? просмотра?
доступный для? аренды?
Связь в FILMiv.film_id = f.film_idна 1 запись INVENTORY
ровно 1 запись FILM
 
Связь в STOREiv.store_id = st.store_idна 1 запись INVENTORY
ровно 1 запись STORE
 
Связь из RENTALre.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
двоичноевозвращать|вернуть не вовремя
возвращать|вернуть не во время
возвращать|вернуть с задержкой
задержать|задерживать при возврате
задержка возврата? фильма?
не вернуть фильм? вовремя
Связь в INVENTORYre.inventory_id = iv.inventory_idна 1 запись RENTAL
ровно 1 запись INVENTORY
 
Связь в CUSTOMERre.customer_id = c.customer_idна 1 запись RENTAL
ровно 1 запись CUSTOMER, rank=5
 
Связь из PAYMENTp.rental_id = re.rental_idна 1 запись RENTAL
любое число записей PAYMENT, rank=10
 
Связь в STAFFre.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двоичноеактивный
Связь в ADDRESSs.address_id = ad.address_idна 1 запись STAFF
ровно 1 запись ADDRESS
 
Связь в STOREs.store_id = st.store_idна 1 запись STAFF
ровно 1 запись STORE, rank=10
работать
место работы
Связь из PAYMENTp.staff_id = s.staff_idна 1 запись STAFF
любое число записей PAYMENT
 
Связь в ADDRESSДорожка таблиц: - STORE -на 1 запись STAFF
любое число записей ADDRESS
работать по адресу
Связь из RENTALre.staff_id = s.staff_idна 1 запись STAFF
любое число записей RENTAL
 
Связь в CUSTOMERДорожка таблиц: - RENTAL -на 1 запись STAFF
любое число записей CUSTOMER
 
Связь из STOREst.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
action1CATEGORY
animation2CATEGORY
children3CATEGORY
classics4CATEGORY
comedy5CATEGORY
documentary6CATEGORY
drama7CATEGORY
emailc.emailCUSTOMER
s.emailSTAFF
english7LANGUAGE
family8CATEGORY
foreign9CATEGORY
french5LANGUAGE
games10CATEGORY
german6LANGUAGE
horror11CATEGORY
idc.customer_idCUSTOMER
f.film_idFILM
a.actor_idACTOR
co.country_idCOUNTRY
ci.city_idCITY
ad.address_idADDRESS
la.language_idLANGUAGE
p.payment_idPAYMENT
ca.category_idCATEGORY
st.store_idSTORE
iv.inventory_idINVENTORY
re.rental_idRENTAL
s.staff_idSTAFF
italian2LANGUAGE
japanese3LANGUAGE
logins.usernameSTAFF
mandarin4LANGUAGE
music12CATEGORY
new13CATEGORY
passwords.passwordSTAFF
russian1LANGUAGE
sci fi14CATEGORY
sports15CATEGORY
travel16CATEGORY
адресad.addressADDRESS
адрес электронной почтыc.emailCUSTOMER
s.emailSTAFF
актерconcat(a.first_name, ' ', a.last_name)ACTOR
актерский коллективcount(actor_id)FILM_ACTOR
актерский составcount(actor_id)FILM_ACTOR
активная записьre.return_date is nullRENTAL
активныйc.active = 1CUSTOMER
s.activeSTAFF
актрисаconcat(a.first_name, ' ', a.last_name)ACTOR
американский7LANGUAGE
английский7LANGUAGE
анимация2CATEGORY
аренда на срок[PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date)RENTAL
аренда у клиентаre.return_date is nullRENTAL
арендаторconcat(c.first_name, ' ', c.last_name)CUSTOMER
арендная стоимостьf.rental_rateFILM
арендная ценаf.rental_rateFILM
артистconcat(a.first_name, ' ', a.last_name)ACTOR
артисткаconcat(a.first_name, ' ', a.last_name)ACTOR
атрибутf.special_featuresFILM
без возрастных ограниченийf.rating = 'G'FILM
без ограниченийf.rating = 'G'FILM
без ограничения возрастаf.rating = 'G'FILM
блокбастерf.titleFILM
1CATEGORY
боевик1CATEGORY
боссs.manager_idSTAFF
быть в аренде[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.amountPAYMENT
величина платежаp.amountPAYMENT
величина платежейsum(p.amount)PAYMENT
вернутьre.return_dateRENTAL
вернуть без задержки[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_durationRENTAL
вернуть взятый на прокат фильмre.return_date is not nullRENTAL
вернуть во время[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_durationRENTAL
вернуть вовремя[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_durationRENTAL
вернуть не во время[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_durationRENTAL
вернуть не вовремя[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_durationRENTAL
вернуть прокатный фильмre.return_date is not nullRENTAL
вернуть с задержкой[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_durationRENTAL
вернуть фильмre.return_dateRENTAL
re.return_date is not nullRENTAL
взятьre.rental_dateRENTAL
взять фильмre.rental_dateRENTAL
военный1CATEGORY
возвратитьre.return_dateRENTAL
возвратить фильмre.return_dateRENTAL
возвращатьre.return_dateRENTAL
возвращать без задержки[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_durationRENTAL
возвращать взятый на прокат фильмre.return_date is not nullRENTAL
возвращать во время[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_durationRENTAL
возвращать вовремя[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_durationRENTAL
возвращать не во время[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_durationRENTAL
возвращать не вовремя[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_durationRENTAL
возвращать прокатный фильмre.return_date is not nullRENTAL
возвращать с задержкой[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_durationRENTAL
возвращать фильмre.return_dateRENTAL
re.return_date is not nullRENTAL
возвращенныйre.return_date is not nullRENTAL
возрастное ограничениеf.ratingFILM
возрастное ограничение 16f.rating = 'NC-17'FILM
возрастное ограничение 16 летf.rating = 'NC-17'FILM
возрастное ограничение 17f.rating = 'NC-17'FILM
возрастное ограничение 17 летf.rating = 'NC-17'FILM
возрастное ограничение 18f.rating = 'NC-17'FILM
возрастное ограничение 18 летf.rating = 'NC-17'FILM
возрастное ограничение от 16f.rating = 'NC-17'FILM
возрастное ограничение от 16 летf.rating = 'NC-17'FILM
возрастное ограничение от 17f.rating = 'NC-17'FILM
возрастное ограничение от 17 летf.rating = 'NC-17'FILM
возрастное ограничение от 18f.rating = 'NC-17'FILM
возрастное ограничение от 18 летf.rating = 'NC-17'FILM
возрастной рейтингf.ratingFILM
возрастной рейтинг 16f.rating = 'NC-17'FILM
возрастной рейтинг 16 плюсf.rating = 'NC-17'FILM
возрастной рейтинг 17f.rating = 'NC-17'FILM
возрастной рейтинг 17 плюсf.rating = 'NC-17'FILM
возрастной рейтинг 18f.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
возрастной рейтинг от 16f.rating = 'NC-17'FILM
возрастной рейтинг от 16 плюсf.rating = 'NC-17'FILM
возрастной рейтинг от 17f.rating = 'NC-17'FILM
возрастной рейтинг от 17 плюсf.rating = 'NC-17'FILM
возрастной рейтинг от 18f.rating = 'NC-17'FILM
возрастной рейтинг от 18 плюсf.rating = 'NC-17'FILM
выпускаf.release_yearFILM
выпуститьf.release_yearFILM
выручкаsum(p.amount)PAYMENT
выручка от арендыsum(p.amount)PAYMENT
выручка от прокатаsum(p.amount)PAYMENT
выходf.release_yearFILM
вышедшийf.release_yearFILM
германский6LANGUAGE
год выпускаf.release_yearFILM
год выпуска фильмаf.release_yearFILM
год выходаf.release_yearFILM
год выхода фильмаf.release_yearFILM
год созданияf.release_yearFILM
год создания фильмаf.release_yearFILM
городci.cityCITY
государствоco.countryCOUNTRY
датаp.payment_datePAYMENT
re.rental_dateRENTAL
re.rental_dateRENTAL
дата взятия в арендуre.rental_dateRENTAL
дата возвратаre.return_dateRENTAL
дата возврата фильмаre.return_dateRENTAL
дата времяp.payment_datePAYMENT
re.rental_dateRENTAL
дата выпускаf.release_yearFILM
дата выпуска фильмаf.release_yearFILM
дата выходаf.release_yearFILM
дата выхода фильмаf.release_yearFILM
дата начала арендыre.rental_dateRENTAL
дата начала аренды фильмаre.rental_dateRENTAL
дата окончания арендыre.return_dateRENTAL
дата окончания аренды фильмаre.return_dateRENTAL
дата отдачиre.return_dateRENTAL
дата отдачи фильмаre.return_dateRENTAL
дата приходаselect min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_idCUSTOMER
дата сдачиre.return_dateRENTAL
дата сдачи в арендуre.rental_dateRENTAL
дата сдачи фильмаre.return_dateRENTAL
дата созданияf.release_yearFILM
p.payment_datePAYMENT
дата создания фильмаf.release_yearFILM
детектив1CATEGORY
детский3CATEGORY
детский рейтингf.rating != 'NC-17'FILM
f.rating = 'PG'FILM
детское кино3CATEGORY
длительностьf.lengthFILM
для взрослыхf.rating = 'NC-17'FILM
для детей3CATEGORY
для любого возрастаf.rating = 'G'FILM
для просмотраnot exists (select * from RENTAL ren where ren.inventory_id = iv.inventory_id and ren.return_date is null)INVENTORY
для семейного просмотра8CATEGORY
дней в аренде[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
документальное кино6CATEGORY
документальный6CATEGORY
дополнительные материалыf.special_featuresFILM
доступный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
драма7CATEGORY
драматический7CATEGORY
драматическое кино7CATEGORY
жанрca.nameCATEGORY
житель москвы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 nullRENTAL
заграничное кино9CATEGORY
заграничный9CATEGORY
задержать при возврате[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_durationRENTAL
задерживать возврата[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_durationRENTAL
задерживать возвращения[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_durationRENTAL
задерживать при возврата[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_durationRENTAL
задерживать при возврате[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_durationRENTAL
задерживать при возвращения[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_durationRENTAL
задерживать фильм[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
задерживаться возврат[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_durationRENTAL
задерживаться возвращение[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_durationRENTAL
задерживаться с возврат[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_durationRENTAL
задерживаться с возвращение[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_durationRENTAL
задержка[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
задержка возврата[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_durationRENTAL
[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_durationRENTAL
задержка возврата фильма[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_durationRENTAL
задержка возвращения[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_durationRENTAL
задержка при возврата[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_durationRENTAL
задержка при возвращения[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_durationRENTAL
задержка фильма[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
закадровые сцены[PostgreSql] array_to_string(f.special_features,',') like '%ЗакадровыеСцены%' [Any] f.special_features like '%Deleted Scenes%'FILM
залоговая стоимостьf.replacement_costFILM
залоговая ценаf.replacement_costFILM
заплатитьp.amountPAYMENT
заплатить арендаp.amountPAYMENT
заплатить аренда фильмаp.amountPAYMENT
заплатить заp.amountPAYMENT
заплатить за арендаp.amountPAYMENT
заплатить за аренда фильмаp.amountPAYMENT
заплатить за фильмаp.amountPAYMENT
заплатить фильмаp.amountPAYMENT
зарубежное кино9CATEGORY
зарубежный9CATEGORY
зватьc.first_nameCUSTOMER
a.first_nameACTOR
s.first_nameSTAFF
игровое кино10CATEGORY
игровое шоу10CATEGORY
игровой10CATEGORY
идентификаторc.customer_idCUSTOMER
f.film_idFILM
a.actor_idACTOR
co.country_idCOUNTRY
ci.city_idCITY
ad.address_idADDRESS
la.language_idLANGUAGE
p.payment_idPAYMENT
ca.category_idCATEGORY
st.store_idSTORE
iv.inventory_idINVENTORY
re.rental_idRENTAL
s.staff_idSTAFF
идтиf.lengthFILM
идущийf.lengthFILM
имяc.first_nameCUSTOMER
f.titleFILM
a.first_nameACTOR
co.countryCOUNTRY
ci.cityCITY
s.first_nameSTAFF
индексad.postal_codeADDRESS
истекший срок[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_durationRENTAL
итальянский2LANGUAGE
итог сдачи в арендуsum(p.amount)PAYMENT
категорияca.nameCATEGORY
киноактерconcat(a.first_name, ' ', a.last_name)ACTOR
киноактрисаconcat(a.first_name, ' ', a.last_name)ACTOR
кинозвездаconcat(a.first_name, ' ', a.last_name)ACTOR
китайский4LANGUAGE
класическое кино4CATEGORY
классика4CATEGORY
классический4CATEGORY
клиент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
комедийное кино5CATEGORY
комедийный5CATEGORY
комедия5CATEGORY
краткое содержаниеf.descriptionFILM
кто арендовал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.amountPAYMENT
логинs.usernameSTAFF
люди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_idSTORE
максимально возможный срок прокатаf.rental_durationFILM
мелодрама7CATEGORY
менеджерs.manager_idSTAFF
менее 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_idSTORE
место их работыselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
место прокатаselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
место работыselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
s.store_id = st.store_idSTAFF
москвичci.city = 'Москва'CITY
музыкальный12CATEGORY
мультипликационный фильм2CATEGORY
мультфильм2CATEGORY
мьюзикл12CATEGORY
мюзикл12CATEGORY
на рукахre.return_date is nullRENTAL
на руках у клиентаre.return_date is nullRENTAL
названиеf.titleFILM
co.countryCOUNTRY
ci.cityCITY
la.nameLANGUAGE
ca.nameCATEGORY
st.store_idSTORE
наименованиеf.titleFILM
co.countryCOUNTRY
ci.cityCITY
ca.nameCATEGORY
st.store_idSTORE
населенный пунктci.cityCITY
находиться в аренде[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 nullRENTAL
находящийся в прокатеre.return_date is nullRENTAL
начальникs.manager_idSTAFF
начальник магазиномst.manager_staff_id = s.staff_idSTORE
начальник складомst.manager_staff_id = s.staff_idSTORE
не вернутьre.return_date is nullRENTAL
[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_durationRENTAL
не вернуть во время[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_durationRENTAL
не вернуть вовремя[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_durationRENTAL
[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_durationRENTAL
не вернуть прокатныйre.return_date is nullRENTAL
не вернуть прокатный фильмre.return_date is nullRENTAL
не вернуть фильмre.return_date is nullRENTAL
не вернуть фильм вовремя[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_durationRENTAL
не возвращать[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_durationRENTAL
не возвращать во время[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_durationRENTAL
не возвращать вовремя[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_durationRENTAL
не завершитьre.return_date is nullRENTAL
не завершить арендуre.return_date is nullRENTAL
не завершить аренду фильмre.return_date is nullRENTAL
не завершить фильмre.return_date is nullRENTAL
незавершенная арендаre.return_date is nullRENTAL
немецкий6LANGUAGE
ниже 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.usernameSTAFF
новинка13CATEGORY
новостной13CATEGORY
новый клиентselect min(rre.rental_date) from RENTAL rre where rre.customer_id = c.customer_idCUSTOMER
номер телефонаad.phoneADDRESS
о войне1CATEGORY
о спорте15CATEGORY
ограничение 16f.rating = 'NC-17'FILM
ограничение 16 летf.rating = 'NC-17'FILM
ограничение 17f.rating = 'NC-17'FILM
ограничение 17 летf.rating = 'NC-17'FILM
ограничение 18f.rating = 'NC-17'FILM
ограничение 18 летf.rating = 'NC-17'FILM
ограничение от 16f.rating = 'NC-17'FILM
ограничение от 16 летf.rating = 'NC-17'FILM
ограничение от 17f.rating = 'NC-17'FILM
ограничение от 17 летf.rating = 'NC-17'FILM
ограничение от 18f.rating = 'NC-17'FILM
ограничение от 18 летf.rating = 'NC-17'FILM
описаниеf.descriptionFILM
оплатаp.amountPAYMENT
p.amountPAYMENT
оплата арендаp.amountPAYMENT
оплата аренда фильмаp.amountPAYMENT
оплата фильмаp.amountPAYMENT
оплатитьp.amountPAYMENT
оплатить арендаp.amountPAYMENT
оплатить аренда фильмаp.amountPAYMENT
оплатить фильмаp.amountPAYMENT
оплачиватьp.amountPAYMENT
оплачивать арендаp.amountPAYMENT
оплачивать аренда фильмаp.amountPAYMENT
оплачивать фильмаp.amountPAYMENT
от 16 летf.rating = 'NC-17'FILM
от 17 летf.rating = 'NC-17'FILM
от 18 летf.rating = 'NC-17'FILM
отдаватьre.return_dateRENTAL
отдавать фильмre.return_dateRENTAL
отдатьre.return_dateRENTAL
отдать фильмre.return_dateRENTAL
офисselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
парольs.passwordSTAFF
переводla.nameLANGUAGE
платаp.amountPAYMENT
плата арендаp.amountPAYMENT
плата аренда фильмаp.amountPAYMENT
плата фильмаp.amountPAYMENT
платежp.amountPAYMENT
платеж арендаp.amountPAYMENT
платеж аренда фильмаp.amountPAYMENT
платеж фильмаp.amountPAYMENT
платежный срок[PostgreSql] date_part('day', p.payment_date - re.rental_date) [Any] datediff(p.payment_date, re.rental_date)PAYMENT
платитьp.amountPAYMENT
платить арендаp.amountPAYMENT
платить аренда фильмаp.amountPAYMENT
платить заp.amountPAYMENT
платить за арендаp.amountPAYMENT
платить за аренда фильмаp.amountPAYMENT
платить за фильмаp.amountPAYMENT
платить фильмаp.amountPAYMENT
покупательconcat(c.first_name, ' ', c.last_name)CUSTOMER
покупкаp.amountPAYMENT
полное имя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.emailCUSTOMER
s.emailSTAFF
почтовый индексad.postal_codeADDRESS
прибыльsum(p.amount)PAYMENT
прибыль от арендыsum(p.amount)PAYMENT
прибыль от прокатаsum(p.amount)PAYMENT
приключенческий1CATEGORY
приключенческое кино1CATEGORY
про войну1CATEGORY
продавецconcat(s.first_name, ' ', s.last_name)STAFF
продолжительностьf.lengthFILM
продолжительность аренды[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.titleFILM
просрочить[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_durationRENTAL
просрочить аренду[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочить аренду возврат[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_durationRENTAL
просрочить аренду возврат фильма[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_durationRENTAL
просрочить аренду фильма[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочить возврат[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочить возврат фильма[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочить фильма[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_durationRENTAL
просрочка[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_durationRENTAL
просрочка аренду[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочка аренду возврат[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_durationRENTAL
просрочка аренду возврат фильма[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_durationRENTAL
просрочка аренду фильма[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочка возврат[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочка возврат фильма[PostgreSql] date_part('day', re.return_date - re.rental_date) - f.rental_duration [Any] datediff(re.return_date, re.rental_date) - f.rental_durationRENTAL
[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_durationRENTAL
просрочка фильма[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_durationRENTAL
пустой магазин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
путешествия16CATEGORY
работает человекconcat(s.first_name, ' ', s.last_name)STAFF
работатьs.store_id = st.store_idSTAFF
работать по адресу STAFF
работникconcat(s.first_name, ' ', s.last_name)STAFF
размер оплатыp.amountPAYMENT
размер платежаp.amountPAYMENT
районad.districtADDRESS
регионad.districtADDRESS
рейтингf.ratingFILM
рейтинг 16f.rating = 'NC-17'FILM
рейтинг 16 плюсf.rating = 'NC-17'FILM
рейтинг 17f.rating = 'NC-17'FILM
рейтинг 17 плюсf.rating = 'NC-17'FILM
рейтинг 18f.rating = 'NC-17'FILM
рейтинг 18 плюсf.rating = 'NC-17'FILM
рейтинг nc17f.rating = 'NC-17'FILM
рейтинг для взрослыхf.rating = 'NC-17'FILM
рейтинг для детейf.rating != 'NC-17'FILM
f.rating = 'PG'FILM
рейтинг не для детейf.rating = 'NC-17'FILM
рейтинг от 16f.rating = 'NC-17'FILM
рейтинг от 16 плюсf.rating = 'NC-17'FILM
рейтинг от 17f.rating = 'NC-17'FILM
рейтинг от 17 плюсf.rating = 'NC-17'FILM
рейтинг от 18f.rating = 'NC-17'FILM
рейтинг от 18 плюсf.rating = 'NC-17'FILM
рейтинг популярностиcount(re.rental_id)RENTAL
романтический7CATEGORY
руководительs.manager_idSTAFF
русский1LANGUAGE
с 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_dateRENTAL
сдавать фильмre.return_dateRENTAL
сдатьre.return_dateRENTAL
сдать фильмre.return_dateRENTAL
семейное кино8CATEGORY
семейный8CATEGORY
складselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
сколько денегsum(p.amount)PAYMENT
сколько стоитf.rental_rateFILM
сколько стоит арендаf.rental_rateFILM
сколько стоит аренда арендоватьf.rental_rateFILM
сколько стоит аренда прокатf.rental_rateFILM
сколько стоит аренда прокат арендоватьf.rental_rateFILM
сколько стоит арендоватьf.rental_rateFILM
сколько стоит прокатf.rental_rateFILM
сколько стоит прокат арендоватьf.rental_rateFILM
служащийconcat(s.first_name, ' ', s.last_name)STAFF
смешной5CATEGORY
снимавшихсяf.release_yearFILM
снятыйf.release_yearFILM
собрать денегsum(p.amount)PAYMENT
сотрудникconcat(s.first_name, ' ', s.last_name)STAFF
специальный атрибутf.special_featuresFILM
спорт15CATEGORY
спортивное кино15CATEGORY
спортивный15CATEGORY
срок аренды[PostgreSql] date_part('day', re.return_date - re.rental_date) [Any] datediff(re.return_date, re.rental_date)RENTAL
срок возвратаf.rental_durationFILM
срок истек[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_durationRENTAL
срок которых истек[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_durationRENTAL
срок платежа[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_durationRENTAL
срок проката которых истек[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_durationRENTAL
стоимостьf.rental_rateFILM
стоимость арендыf.rental_rateFILM
стоимость возмещенияf.replacement_costFILM
стоимость возмещения вf.replacement_costFILM
стоимость возмещения в случаеf.replacement_costFILM
стоимость возмещения в случае утратыf.replacement_costFILM
стоимость возмещения в утратыf.replacement_costFILM
стоимость возмещения случаеf.replacement_costFILM
стоимость возмещения случае утратыf.replacement_costFILM
стоимость возмещения утратыf.replacement_costFILM
стоимость залогаf.replacement_costFILM
стоимость залога вf.replacement_costFILM
стоимость залога в случаеf.replacement_costFILM
стоимость залога в случае утратыf.replacement_costFILM
стоимость залога в утратыf.replacement_costFILM
стоимость залога случаеf.replacement_costFILM
стоимость залога случае утратыf.replacement_costFILM
стоимость залога утратыf.replacement_costFILM
стоимость на арендуf.rental_rateFILM
стоимость прокатаf.rental_rateFILM
select ffi.rental_rate from FILM ffi join INVENTORY iinv on iinv.film_id = ffi.film_id where iinv.inventory_id = re.inventory_idRENTAL
странаco.countryCOUNTRY
страшное кино11CATEGORY
страшный11CATEGORY
сумма выручки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.amountPAYMENT
сумма платежей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.descriptionFILM
телефонad.phoneADDRESS
точка прокатаselect aa.address from ADDRESS aa where aa.address_id = st.address_idSTORE
трейлер[PostgreSql] array_to_string(f.special_features,',') like '%Трейлеры%' [Any] f.special_features like '%Trailers%'FILM
триллер11CATEGORY
удаленные сцены[PostgreSql] array_to_string(f.special_features,',') like '%УдаленныеСцены%' [Any] f.special_features like '%Deleted Scenes%'FILM
ужастик11CATEGORY
ужасы11CATEGORY
управляющий магазиномst.manager_staff_id = s.staff_idSTORE
управляющий складомst.manager_staff_id = s.staff_idSTORE
фамилияc.last_nameCUSTOMER
a.last_nameACTOR
s.last_nameSTAFF
фамилия имя отчествоconcat(c.first_name, ' ', c.last_name)CUSTOMER
concat(a.first_name, ' ', a.last_name)ACTOR
concat(s.first_name, ' ', s.last_name)STAFF
фантастика14CATEGORY
фантастический14CATEGORY
фильмf.titleFILM
фио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 nullSTAFF
фотографияs.picture is not nullSTAFF
фотокарточкаs.picture is not nullSTAFF
французский5LANGUAGE
художественный фильмf.titleFILM
ценаf.rental_rateFILM
цена арендыf.rental_rateFILM
цена возмещенияf.replacement_costFILM
цена возмещения вf.replacement_costFILM
цена возмещения в случаеf.replacement_costFILM
цена возмещения в случае утратыf.replacement_costFILM
цена возмещения в утратыf.replacement_costFILM
цена возмещения случаеf.replacement_costFILM
цена возмещения случае утратыf.replacement_costFILM
цена возмещения утратыf.replacement_costFILM
цена залогаf.replacement_costFILM
цена залога вf.replacement_costFILM
цена залога в случаеf.replacement_costFILM
цена залога в случае утратыf.replacement_costFILM
цена залога в утратыf.replacement_costFILM
цена залога случаеf.replacement_costFILM
цена залога случае утратыf.replacement_costFILM
цена залога утратыf.replacement_costFILM
цена на арендуf.rental_rateFILM
цена прокатаf.rental_rateFILM
штрафf.replacement_costFILM
штраф за утратуf.replacement_costFILM
штраф утратыf.replacement_costFILM
экшен1CATEGORY
электронная почтаc.emailCUSTOMER
s.emailSTAFF
электронный адресc.emailCUSTOMER
s.emailSTAFF
языкla.nameLANGUAGE
язык озвучкиla.nameLANGUAGE
язык фильмаla.nameLANGUAGE
японский3LANGUAGE