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
Трюк дня. MySQL LIKE IN()

Напишите запрос, который выберет из таблицы user все значения id, содержащие в себе 114, 23 и 868.

Запрос должен быть короче, чем следующий запрос:

SELECT * FROM user t
WHERE t.id LIKE '%1
14%'
OR t.id LIKE '%2
3%'
OR t.id LIKE '%868%';

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

#tips
Трюк дня. MySQL LIKE IN(). Решение

Используем функцию REGEXP:

SELECT * FROM user t
WHERE t.id REGEXP '114|23|868';


#tips
Какие SQL-операции относятся к командам DDL?
Anonymous Quiz
52%
DROP, ALTER
16%
SELECT, CREATE
4%
ALERT, SELECT
12%
UPDATE, MERGE
17%
Посмотреть ответы
#вопрос15

Важен ли в составном индексе порядок столбцов?

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

Важен.

Когда строится составной индекс, сначала индексируется первый столбец, а потом строятся индексы других столбцов, на основании главного (первого).

#вопросы #собеседование
#вопрос16

Какими бывают подстановочные знаки?

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

% — заменить ноль или более символов;
_ — заменить один символ.

Примеры:

SELECT * FROM user WHERE name LIKE '%test%';
Данный запрос позволяет найти данные всех пользователей, имена которых содержат в себе «test».

SELECT * FROM user WHERE name LIKE 't_est';
А в этом случае имена искомых пользователей начинаются на «t», после содержат какой-либо символ и «est» в конце.

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

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

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

Ответ: 7,9 + 9 + 13,1 = 30.

#логика
Трюк дня. Агрегирование записей в PostgreSQL

Таблица projects содержит три столбца: task_id, start_date и end_date.

Разница между датой окончания (end_date) и датой начала (start_date) составляет 1 день для каждой строки таблицы. Если даты окончания задач последовательны, они являются частью одного проекта. Даты проектов не пересекаются.

Напишите запрос, возвращающий даты начала и окончания каждого проекта, а также количество дней, затраченных на его выполнение. Расположите их в порядке возрастания продолжительности проекта, а в случае равенства - по возрастанию даты начала.

Код создания view исходной таблицы projects здесь.

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

#tips
Трюк дня. Агрегирование записей в PostgreSQL. Решение

WITH projects (task_id, start_date, end_date)
AS (VALUES
(1, CAST('10-01-20' AS date), CAST('10-02-20' AS date)),
(2, CAST('10-02-20' AS date), CAST('10-03-20' AS date)),
(3, CAST('10-03-20' AS date), CAST('10-04-20' AS date)),
(4, CAST('10-13-20' AS date), CAST('10-14-20' AS date)),
(5, CAST('10-14-20' AS date), CAST('10-15-20' AS date)),
(6, CAST('10-28-20' AS date), CAST('10-29-20' AS date)),
(7, CAST('10-30-20' AS date), CAST('10-31-20' AS date))),

-- получим такие даты начала, которых не существует в колонке даты окончания (это 'настоящие' даты начала проекта)

t1 AS (
SELECT start_date
FROM projects
WHERE start_date NOT IN (SELECT end_date FROM projects) ),

-- получим такие даты окончания, которые не существуют в колонке дат начала (это 'настоящие' даты окончания проекта)
t2 AS (
SELECT end_date
FROM projects
WHERE end_date NOT IN (SELECT start_date FROM projects) ),

--отфильтруем допустимые пары начало-окончание (начало < окончание), затем найдем правильную дату окончания для каждой даты начала (минимальная дата окончания, поскольку нет пересекающихся проектов)

t3 AS (
SELECT
start_date,
MIN(end_date) AS end_date
FROM t1, t2
WHERE start_date < end_date
GROUP BY 1 )
SELECT
*,
end_date - start_date AS project_duration
FROM t3
ORDER BY 3, 1

#tips
#вопрос17

Перечислите способы получить количество записей в таблице?

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

Для подсчета количества записей в таблице вы можете использовать следующие запросы:

SELECT * FROM table1;

SELECT COUNT(*) FROM table1;

SELECT rows FROM sysindexes WHERE id = OBJECT_ID(table1) AND indid < 2;


#вопросы #собеседование
Трюк дня. Номер строки в PostgreSQL

Таблица products содержит следующие данные:
id name
42 Milk
22 Bread
28 Pen


Напишите запрос, возвращающий порядковый номер строки в порядке убывания id.

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

#tips
Трюк дня. Номер строки в PostgreSQL. Решение

SELECT
id,
name,
ROW_NUMBER () OVER (ORDER BY id
DESC)
FROM products;

#tips