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
Трюк дня. Поменять местами соседние записи. Решение

SELECT 
CASE
WHEN ((SELECT MAX(id) FROM seat)%2 = 1) AND id = (SELECT MAX(id) FROM seat) THEN id
WHEN id%2 = 1 THEN id + 1
ELSE id - 1
END AS id, student
FROM seat
ORDER BY id;

#tips
#вопрос24

Какие параметры используются в конструкции ORDER BY?

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

Каждой букве соответствует цифра от 0 до 9. Известно, что D=5. Вычислите все остальные цифры.

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

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

Ответ:
D = 5
O = 2
N = 6
A = 4
L = 8
G = 1
R = 7
B = 3
E = 9
T = 0

Задача решается простыми математическими расчётами и подбором.

Подробный разбор решения смотрите здесь

#логика
Трюк дня. Улучшить производительность запроса к таблице с индексом

В таблице test в столбце signup_date содержатся данные типа date. Для этого стоблца существует индекс.

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

SELECT
*
FROM test
WHERE DATEPART (YEAR, signup_date) = '2021';

Перепишите запрос так, чтобы существующий индекс стал использоваться.

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

#tips
Трюк дня. Улучшить производительность запроса к таблице с индексом. Решение

При использовании функции DATEPART происходит неявное преобразование типа данных. И индекс не будет использован.

Поэтому для лучшей производительности запрос лучше писать следующим образом:

*
FROM test
WHERE signup_date >= '20210101'
AND signup_date < '20220101';

#tips
#вопрос25

В чем разница между функциями RANK() и DENSE_RANK()?

Приведите пример.

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

Единственная разница между функциями RANK() и DENSE_RANK() заключается в случаях, когда несколько значений в наборе имеют одинаковый ранг.

В таких случаях RANK() будет назначать непоследовательные «ранги» значениям в наборе.

Тогда как DENSE_RANK() будет назначать последовательные ранги значениям в наборе.

Например, рассмотрим набор
{25, 25, 50, 75, 75, 100}.

Для такого набора RANK() вернет
{1, 1, 3, 4, 4, 6} (обратите внимание, что значения 2 и 5 пропущены), тогда как DENSE_RANK() вернет
{1, 1, 2, 3, 3, 4}.

#вопросы #собеседование
👍2
Статья дня. Оконные функции SQL простым языком с примерами

#sql

Читать статью
Трюк дня. Частичные ограничения на значения в PostgreSQL

Cоздайте ограничение (constraint) на таблицу foobar. Ограничение должно проверять уникальность двух полей: строкового bar и логического bing.

Однако, есть дополнительное требование: допускается существование только одной записи с некой строкой и значением TRUE. В то же время, допускается несколько записей с некой строкой, но значением FALSE.

Например, может быть несколько {«abc», false}, но только одна строка {«abc», true}.

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

#tips
Трюк дня. Частичные ограничения на значения в PostgreSQL. Решение

Для решения данной задачи используем механизм частичных индексов (partial indices).

CREATE TABLE foobar(bar TEXT, bing BOOLEAN);
CREATE UNIQUE INDEX baz_index ON foobar(bar, bing) WHERE bing = 't';
INSERT INTO foobar VALUES('1','t');
INSERT INTO foobar VALUES('2','t');
INSERT INTO foobar VALUES('1','f');
INSERT INTO foobar VALUES('1','f');
INSERT INTO foobar VALUES('1','t');

В результате выполнения последнего INSERT получим следующее сообщение:
ERROR: duplicate key value violates unique constraint «baz_index»

#tips
#вопрос26

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

SELECT 
id,
SUM (value) OVER (PARTITION BY i ORDER BY y),
*
FROM table1;

Примечание: все поля существуют в таблице и соответствуют нужному типу данных.

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

Да, отработает.

Классический пример аналитической функции, внутри которой сначала выполняется группировка (PARTITION BY), потом выполняется сортировка (ORDER BY) и применяется агрегирующая функция.

В данном случае все написано правильно.

Этот вопрос проверяет у кандидата знание оконных функций.

#вопросы #собеседование
👍2
Какой MySQL запрос возвратит позицию ’com‘ в строке ‘www.sql.com’?
Anonymous Quiz
14%
SELECT STR ("www.sql.com", "com");
28%
SELECT INSTR("www.sql.com", "com");
14%
Ничего из перечисленного
20%
Посмотреть ответы
👍2
Трюк дня. Найти дубли в поле email

Из таблицы customers выберите только те email, у которых есть дубликаты.

Также укажите количество повторений для каждого такого email.

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

#tips