ae208a76fb
Практика: 'JOIN' - 'Массивы, Map и вложенные структуры*' - 'Партиции' - 'Индексы'.
57 lines
1.6 KiB
SQL
57 lines
1.6 KiB
SQL
-- Задание 1
|
|
|
|
SELECT
|
|
pro.product_id,
|
|
pro.name,
|
|
pri.price
|
|
FROM
|
|
mnoskov.products pro
|
|
ANY LEFT JOIN
|
|
mnoskov.prices pri ON pro.product_id = pri.product_id;
|
|
-- 2 Выберется случайная из цен.
|
|
-- 3 ALL LEFT JOIN - работает также как и LEFT JOIN. Его избегают потому что он тянет больше строк в оперативную память.
|
|
|
|
|
|
-- Задание 2
|
|
|
|
SELECT
|
|
o.time,
|
|
o.symbol,
|
|
o.size,
|
|
t.price
|
|
FROM
|
|
mnoskov.orders o
|
|
ASOF JOIN
|
|
mnoskov.ticks t ON o.symbol = t.symbol AND t.time <= o.time
|
|
WHERE symbol = 'AAPL';
|
|
-- Потому что дата сделки и дата последней фиксации цены - разные.
|
|
|
|
|
|
-- Задание 3
|
|
|
|
SELECT
|
|
user_id,
|
|
name
|
|
FROM
|
|
mnoskov.users
|
|
WHERE user_id IN (
|
|
SELECT user_id
|
|
FROM mnoskov.payments
|
|
WHERE amount > 1000
|
|
);
|
|
-- 3 Потому что это фильтрация по существованию. Как оптимизируется не знаю, наверное как подзапрос.
|
|
|
|
|
|
-- Задание 4
|
|
|
|
SELECT
|
|
bl.user_id,
|
|
u.name AS user_name,
|
|
bl.event_time,
|
|
bl.event_type
|
|
FROM
|
|
mnoskov.big_logs bl
|
|
JOIN
|
|
mnoskov.users u ON bl.user_id = u.user_id;
|
|
-- 2 потому что таблица users меньше, а значит в оператику полетит меньше данных.
|
|
-- 3 если user_id уникален, то нужно выбирать ALL, так как дублей нет. В текущем задании дубли есть, но мы все равно выбираем ALL, тк нужно вывести имя для каждого лога а не юзера. |