← К оглавлению занятия

✅ Решения

⚡ Кратко: решения

  • Задание 1 — CASE / IF с проверкой quantity < 20.
  • Задание 2 — WHERE purchase_order_id BETWEEN 90 AND 100 + CASE.
  • Задание 3 — вложенные IF.
  • Задание 5 — не забудьте OFFSET 1 для строки «начиная со второй».
1

Решение задания 1

Классификация остатков двумя способами.

-- CASE
SELECT quantity,
       CASE
           WHEN quantity < 20 THEN 'Almost finish'
           ELSE 'Enough'
       END AS category
FROM inventory_transactions;

-- IF
SELECT quantity,
       IF(quantity < 20, 'Almost finish', 'Enough') AS category
FROM inventory_transactions;
2

Решение задания 2

Фильтр по диапазону и категоризация по количеству.

SELECT *,
       CASE
           WHEN quantity < 30 THEN 'small'
           WHEN quantity BETWEEN 30 AND 70 THEN 'medium'
           ELSE 'large'
       END AS category
FROM purchase_order_details
WHERE purchase_order_id BETWEEN 90 AND 100;
3

Решение задания 3

Те же категории через вложенные IF.

SELECT *,
       IF(quantity < 30, 'small',
          IF(quantity > 70, 'large', 'medium')) AS category
FROM purchase_order_details
WHERE purchase_order_id BETWEEN 90 AND 100;
4

Решение задания 4

Уникальные purchase_order_id с фильтром по стоимости.

SELECT DISTINCT purchase_order_id
FROM purchase_order_details
WHERE unit_cost > 10
ORDER BY purchase_order_id DESC;
5

Решение задания 5

Пять строк, начиная со второй, с фильтром по должности и сортировкой по региону.

SELECT *
FROM customers
WHERE job_title = 'Owner'
ORDER BY state_province ASC
LIMIT 5 OFFSET 1;
6

Решение задания 6

Уникальные продукты с высокой суммарной стоимостью строки заказа.

SELECT DISTINCT product_id
FROM order_details
WHERE quantity * unit_price > 200
ORDER BY product_id ASC
LIMIT 7;
7

Решение задания 7

Инициалы через LEFT и CONCAT.

SELECT CONCAT(LEFT(first_name, 1), '.', LEFT(last_name, 1), '.') AS initials
FROM employees;
8

Решение задания 8

Замена NULL на 'No data' двумя способами.

-- IF
SELECT *,
       IF(payment_type IS NULL, 'No data', payment_type) AS payment_type_filled
FROM orders;

-- CASE
SELECT *,
       CASE
           WHEN payment_type IS NULL THEN 'No data'
           ELSE payment_type
       END AS payment_type_filled
FROM orders;
9

Решение задания 9

Имя и фамилия в верхнем регистре.

SELECT UPPER(first_name) AS first_name_upper,
       UPPER(last_name) AS last_name_upper
FROM customers;
10

Решение задания 10

Три цифры после кода в скобках. Если формат телефона (XXX) XXX-XXXX, то нужные цифры начинаются с позиции 6.

SELECT business_phone,
       SUBSTRING(business_phone, 6, 3) AS phone_part
FROM employees;