--3.1
SELECT *
FROM   products
    
--3.2
SELECT *
FROM   products
ORDER BY name
--Для сортировки значений по какой-либо колонке в SQL используется оператор ORDER BY
  --  с ключевыми словами ASC (по возрастанию) или DESC (по убыванию).

--При этом по умолчанию сортировка происходит по возрастанию,
    --т.е. ASC указывать не обязательно. Для сортировки по убыванию после ORDER BY 
   -- необходимо явно указать DESC

--3.3
SELECT *
FROM   courier_actions
ORDER BY courier_id, action, time desc 
LIMIT 1000

--3.4
SELECT name,
       price
FROM   products
ORDER BY price desc 
LIMIT 5

--3.5
SELECT name as product_name,
       price as product_price
FROM   products
ORDER BY price desc 
LIMIT 5

--3.6
SELECT name,
       length(name) as name_length,
       price
FROM   products
ORDER BY name_length desc 
LIMIT 1

--3.7
    --Примените последовательно функции UPPER и SPLIT_PART к колонке name и 
    --преобразуйте наименования товаров в таблице products так,
    --чтобы от названий осталось только первое слово, записанное в верхнем регистре.
SELECT name,
       upper(split_part(name, ' ', 1)) as first_word,
       price
FROM   products
ORDER BY name limit 1000

--3.8
  --Измените тип колонки price из таблицы products на VARCHAR. 
  --Выведите колонки с наименованием товаров, ценой в исходном формате и ценой в формате VARCHAR.
SELECT name,
       price,
       price::varchar as price_char
FROM   products
ORDER BY name


--Вариант верного решения:
SELECT name,
       price,
       cast(price as varchar) as price_char
FROM   products
ORDER BY name

--3.9
    --Для первых 200 записей из таблицы orders выведите информацию в 
    --следующем виде (обратите внимание на пробелы):
    --Заказ № [id_заказа] создан [дата]
SELECT concat('Заказ № ', order_id, ' создан ', date(creation_time)) as order_info
FROM   orders
ORDER BY order_id limit 200

--3.10
SELECT courier_id,
       date_part('year', birth_date) as birth_year
FROM   couriers
ORDER BY birth_year desc, courier_id

--3.11
    --Как и в предыдущем задании, снова выведите id всех курьеров и их годы рождения, только 
    --теперь к извлеченному году примените функцию COALESCE. 
    --Укажите параметры функции так, чтобы вместо NULL значений в результат попадало текстовое 
    --значение unknown
       --Не забудьте учесть, что unknown — значение типа VARCHAR, а значит, извлечённый из 
       --даты год нужно тоже привести к этому типу. Поэтому сначала извлеките год, 
       --затем преобразуйте его в текст и далее применяйте к полученному значению функцию COALESCE
SELECT courier_id,
       coalesce(cast(date_part('year', birth_date) as varchar), 'unknown') as birth_year
FROM   couriers
ORDER BY birth_year desc, courier_id


--Вариант верного решения:
SELECT courier_id,
       coalesce(date_part('year', birth_date)::varchar, 'unknown') as birth_year
FROM   couriers
ORDER BY birth_year desc, courier_id

--3.12
    --повысить цену всех товаров в таблице products на 5%.
SELECT product_id,
       name,
       price as old_price,
       price + price * 0.05 as new_price
FROM   products
ORDER BY new_price desc, product_id


--Вариант верного решения:
SELECT product_id,
       name,
       price as old_price,
       price*1.05 as new_price
FROM   products
ORDER BY new_price desc, product_id

--3.13
SELECT product_id,
       name,
       price as old_price,
       round(price*1.05, 1) as new_price
FROM   products
ORDER BY new_price desc, product_id

--3.14
    --Повысьте цену на 5% только на те товары, цена которых превышает 100 рублей. 
    --Цену остальных товаров оставьте без изменений. 
    --Также не повышайте цену на икру, которая и так стоит 800 рублей. 
SELECT product_id,
       name,
       price as old_price,
       case when price = 800 then price * 1
            when price > 100 then price * 1.05
            else price * 1 end as new_price
FROM   products
ORDER BY new_price desc, product_id


--Вариант верного решения:
SELECT product_id,
       name,
       price as old_price,
       case when price <= 100 or
                 name = 'икра' then price
            when price > 100 then price*1.05
            else 0 end new_price
FROM   products
ORDER BY new_price desc, product_id

--3.15
--Вычислите НДС каждого товара в таблице products и рассчитайте цену без учёта НДС.
--Выведите всю информацию о товарах, включая сумму налога и цену без его учёта.
   --Так как НДС уже включён в текущую цену, налог считаем следующим образом: 
   --делим цену на 120% и умножаем на 20%.
SELECT product_id,
       name,
       price,
       round(price/120*20, 2) as tax,
       round(price - price/120*20, 2) as price_before_tax
FROM   products
ORDER BY price_before_tax desc, product_id


Embed on website

To embed this project on your website, copy the following code and paste it into your website's HTML: