SQL Pro
5.07K subscribers
142 photos
2 videos
10 files
127 links
SQL Pro - всё об SQL
Реклама: @anothertechrock

Контент канала:
1. Разбор вопросов с собеседований
2. Трюки SQL
3. Видео
4. Тесты
5. Задачи на логику
6. Юмор
Download Telegram
Трюк дня. COALESCE() для перезаписи NULL

При помощи функции COALESCE() можно перезаписать NULL на другое значение:

SELECT
id,
null_var,
COALESCE(null_var, 'missing') AS recode_null_var
FROM
current_table
ORDER BY id


Запрос вернёт значение ‘missing‘ для всех строк таблицы, где null_var IS NULL

#tips
Видео дня. Практические задачи по SQL / join, подзапрос, максимальное

Ссылка на YouTube

#видео
Задача на логику.

Решение будет вечером.

#логика
Решение сегодняшней задачи на логику.

Ответ: 734

#логика
Задача на логику.

M, A и T — уникальные цифры, причём MAM + MAT + MTT в сумме даёт 1416.

Вопрос: чему равны M, A и T?

Решение будет вечером.

#логика
Решение сегодняшней задачи на логику.

Ответ:
M = 4
A = 7
T = 6

#логика
Что выведет этот код, если in_basket IS NULL?
Anonymous Quiz
7%
0
29%
price*ordered
41%
NULL
19%
ошибку
5%
ничего из перечисленного
Tips & Tricks. Порядок исполнения в SQL

Разбираем, каков порядок исполнения операторов в SQL. И как можно улучшить производительность запросов.

#sql

Читать статью
Трюк дня. Объединить значения из нескольких строк таблицы в одну, группируя по определённому параметру.

Например, есть таблица:

id name value
1 A 4
1 B 8
2 C 9

В результате нужно получить следующее:

id column
1 A:4, B:8
2 C:9

В SQL Server 2017, Azure можно использовать функцию STRING_AGG:

SELECT
id,
STRING_AGG(
CONCAT(name,’:’,[value], ‘, ‘)
FROM table
GROUP BY id

#tips
Трюк дня. Получить id покупки с максимальной value для каждого customer.

Например, есть таблица:

id customer value
1 Alex 5
2 Sam 1
3 Sam 3

В результате нужно получить следующее:

id customer value
1 Alex 5
3 Sam 3

В PostgreSQL можно использовать оператор DISTINCT ON:

SELECT
DISTINCT ON(customer)
id,
customer,
value
FROM table
ORDER BY customer, value
DESC, id

#tips
А какие варианты решения вы знаете?
Какой оператор нужно вставить вместо [?], чтобы обновить всю колонку city в таблице customers?
Anonymous Quiz
36%
WHERE
7%
ON
52%
SET
1%
ошибка
5%
ничего из перечисленного
Трюк дня. Найти записи с граничными значениями без соединения таблицы на саму себя

Один из вариантов - это сначала найти максимальное значение для каждого ID с помощью GROUP BY, и затем соединить таблицу с самой собой по ID и max значению.
Но есть способ лучше:

SELECT
dat2.*
FROM
(
SELECT
dat.*,
CASE WHEN (num = MAX(num) OVER (PARTITION BY id)) THEN 'y' ELSE 'n' END AS max_num
FROM current_table dat
) dat2
WHERE max_num = 'y'

#tips
👍1