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
Трюк дня. Улучшить производительность запроса к таблице с индексом. Решение

При использовании функции 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
Трюк дня. Найти дубли в поле email. Решение

SELECT email, COUNT (email)
FROM customers
GROUP BY email
HAVING COUNT (email) > 1;


#tips
#вопрос27

В чем разница между операторами DELETE и TRUNCATE?

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

1. DELETE:Используется для удаления строки в таблице
TRUNCATE:Используется для удаления всех строк из таблицы

2. DELETE:Вы можете восстановить данные после удаления
TRUNCATE:Вы не можете восстановить данные (прим. перевод.: операции логируются по разному, но в SQL Server есть возможность сделать откат) транзакции)

3. DELETE:DML-команда
TRUNCATE:DDL-команда

4. DELETE:Медленнее, чем оператор TRUNCATE
TRUNCATE:Быстрее

#вопросы #собеседование
👍5
Статья дня. Как не надо индексировать

#sql

Читать статью
Какое из следующих MySQL выражений вернёт строки, которые НЕ начинаются с букв a, b или с?
Anonymous Quiz
23%
WHERE value REGEXP ^[abc];
18%
WHERE value REGEXP ^[^abc];
20%
WHERE value REGEXP ^_[abc];
23%
WHERE value REGEXP ^[abc]*;
16%
Посмотреть ответы
👍2
Трюк дня. Выбрать значения, которые соответствуют одному из нескольких шаблонов

Из PostgreSQL таблицы customers выберите только тех пользователей, текстовое поле phone которых содержит либо +011, либо +044, либо +099.

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

#tips
👍2
Трюк дня. Выбрать значения, которые соответствуют одному из нескольких шаблонов. Решение

SELECT *
FROM customers
WHERE phone LIKE ANY('{%+011%,%+044%,%+099%}');

#tips
👍3
#вопрос28

Как получить общие записи из двух PostgreSQL таблиц?

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