Практика: прайс-лист
Pixel Shop переделывает свой прайс-лист, и у вас есть для этого все инструменты. Прайс-лист — хорошая проверка для этого урока: почти каждый столбец в нём вычисляемый.
Функции можно вкладывать друг в друга, как и всё остальное, что вы изучили: функция может быть аргументом другой функции, вычисление — находиться внутри функции, а функция — в условии CASE. Например, инициалы каждого клиента — это первая буква имени и первая буква после пробела:
SELECT name,
SUBSTR(name, 1, 1) || SUBSTR(name, INSTR(name, ' ') + 1, 1) AS initials
FROM customers
LIMIT 3;| name | initials |
|---|---|
| Emma Clark | EC |
| Liam Turner | LT |
| Olivia Brown | OB |
Несколько советов для таких запросов:
- Собирайте длинный столбец по шагам. Сначала напишите самую внутреннюю часть, например
INSTR(name, ' '), запустите её и проверьте результат, и только потом оберните в следующую функцию. - Считайте скобки. Каждая функция открывает одну, и каждую нужно закрыть;
incomplete inputили синтаксическая ошибка часто означают, что одной не хватает. - Помните про деление нацело и про
NULL: нужен ли в вычислении.0? Может ли столбец бытьNULL, и каким тогда должен быть результат? - Давайте каждому вычисляемому столбцу имя с помощью
AS.
Задание
- 1
В прайс-листе на сайте рядом с каждой игрой показан значок. Покажите название, цену и
badge:предзаказдля игр, которые ещё не вышли,новинкадля игр, вышедших в 2025 году, ив наличиидля остальных. Отсортируйте игры по цене от самой высокой, а игры с одинаковой ценой — по названию:title price badge Knight's Oath 60 новинка Goal Rush 50 новинка Ice Hockey Pro 45 в наличии Dragon Forge 40 в наличии Robot Rebellion 40 предзаказ … … … - 2
Игры, вышедшие до 2023 года, идут на распродажу со скидкой 25%. Ниже покажите их название, цену и
sale_price: цену, умноженную на 0.75, округлённую до целых долларов и показанную целым числом (23, а не23.0). Отсортируйте их по дате выхода:title price sale_price Cube Logic 5 4 Castle Siege 30 23 Ocean Deep 15 11 Lost Temple 20 15 Moon Farm 20 15 - 3
На чеке есть место для 13 символов названия. Покажите
label: названия до 13 символов включительно как есть, а более длинные — обрезанные до первых 10 символов с...в конце, то есть всего 13 символов. Затем покажите цену. Отсортируйте игры по цене от самой высокой, а игры с одинаковой ценой — по названию:label price Knight's Oath 60 Goal Rush 50 Ice Hockey... 45 … …