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
Трюк дня. Генерация данных с помощью рекурсии в PostgreSQL. Решение

WITH recursive t (v) AS (
SELECT 1 -- Исходное значение
UNION ALL
SELECT v + 1 -- Рекурсия
FROM t
)
SELECT v
FROM t
LIMIT 5

#tips
#вопрос20

Даны таблицы workers и departments. Найдите все департаменты без единого сотрудника.

#вопросы #собеседование
Ответ на #вопрос20

SELECT department_name
FROM workers w
RIGHT JOIN departments d ON (w.department_id = d.department_id)
WHERE first_name IS NULL;

#вопросы #собеседование
Задача на логику.

Представьте, что земной шар обмотали веревкой по экватору. Затем веревку увеличили на 1 метр и расположили так, что любая точка экватора равноудалена от веревки.

Сможет ли между веревкой и поверхностью земли пролезть мышь?

P.S. под экватором подразумеваем окружность :)

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

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

Ответ: да, сможет. Расстояние между веревкой и экватором составит ≈ 16 см.

Исходная длина = 2*π*R1
Новая длина = 2*π*R2 = Исходная длина + 1
Получаем: 2*π*R2 = 2*π*R1 + 1
Откуда: R2 - R1 = 1/(2*π) ≈ 0.16 м ≈ 16 см

#логика
Трюк дня. Проверка уникальности имени и фамилии

Напишите SQL запрос, который проверит уникальность комбинации name и surname таблицы customers при отсутствии первичных ключей:

name surname
Alex Kruis
Tim Boils
Tom Andreas
Tim Boils

Вариант решения будет вечером.

#tips
Трюк дня. Проверка уникальности имени и фамилии. Решение

SELECT
COUNT (*),
COUNT (DISTINCT name || surname)
FROM customers;

#tips
#вопрос21

Отработает ли данный период запрос или упадёт с ошибкой?

UPDATE table_1 SET field1 = ROW_NUMBER () FROM table_1;

#вопросы #собеседование
Ответ на #вопрос21

Нет, не отработает. Опытный инженер знает, что ROW_NUMBER() — это часть аналитической функции, которая не может быть применена сама по себе. Аналитические функции  используются только в конcтрукциях SELECT или ORDER BY.

#вопросы #собеседование
Статья дня. Использование хэш-ключей вместо строковых индексов

#sql

Читать статью
Трюк дня. Сравнение значений столбцов

Перепишите PostgreSQL запрос так, чтобы не использовать оператор AND.

WITH users (id, surname)
AS (VALUES
(1, 'Powers'),
(2, 'Sierra'),
(3, 'Oushen'))

SELECT id, surname
FROM users
WHERE id = 2 AND surname = 'Sierra';

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

#tips
Трюк дня. Сравнение значений столбцов. Решение

WITH users (id, surname)
AS (VALUES
(1, 'Powers'),
(2, 'Sierra'),
(3, 'Oushen'))

SELECT id, surname
FROM users
WHERE (id, surname) = (2,'Sierra');

#tips
C помощью какого запроса можно получить текущую структуру таблицы tbl?
Anonymous Quiz
21%
SELECT * FROM tbl
1%
DROP TABLE tbl
28%
SHOW TABLE STRUCTURE tbl
31%
DESCRIBE tbl
9%
Все варианты неверные
10%
Узнать ответ
👍3
#вопрос22

В чем разница между UNION и UNION ALL?

#вопросы #собеседование
Ответ на #вопрос22

Оба UNION и UNION ALL объединяют результат двух разных SQL запросов.

Они отличаются тем, как они обрабатывают дубликаты:

UNION выполняет DISTINCT в результирующем наборе, исключая любые повторяющиеся строки.

UNION ALL не удаляет дубликаты, и поэтому он быстрее, чем UNION.

#вопросы #собеседование
Трюк дня. Максимальное значение без self-join

Напишите MySQL запрос, возвращающий максимальную salary для каждого t_id, не соединяя таблицу саму на себя.

t_id salary
1 2500
2 3000
1 1900


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

#tips
Трюк дня. Максимальное значение без self-join. Решение

SELECT *
FROM
(
SELECT
e.*,
CASE WHEN (salary = MAX (salary) OVER (PARTITION BY t_id)) THEN 'Y' ELSE 'N' END AS max_num_id
FROM
employee e
) DAT2
WHERE max_num_id = 'Y';


#tips