Трюк дня. Агрегирование записей в PostgreSQL
Таблица
Разница между датой окончания (
Напишите запрос, возвращающий даты начала и окончания каждого проекта, а также количество дней, затраченных на его выполнение. Расположите их в порядке возрастания продолжительности проекта, а в случае равенства - по возрастанию даты начала.
Код создания view исходной таблицы projects здесь.
Решение будет вечером.
#tips
Таблица
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
Для подсчета количества записей в таблице вы можете использовать следующие запросы:
#вопросы #собеседование
Для подсчета количества записей в таблице вы можете использовать следующие запросы:
SELECT * FROM table1;
SELECT COUNT(*) FROM table1;
SELECT rows FROM sysindexes WHERE id = OBJECT_ID(table1) AND indid < 2;#вопросы #собеседование
Какой запрос возвратит работников с зарплатой >=2500 и <=4500?
Anonymous Quiz
58%
SELECT * FROM employees WHERE salary BETWEEN 2500 AND 4500;
6%
SELECT * FROM employees WHERE salary > 2499 AND < 4501;
9%
SELECT * FROM employees WHERE salary IN (2500, 4500);
23%
SELECT * FROM employees WHERE salary > 2499 AND salary < 4501;
4%
Посмотреть ответы
#вопрос18
В таблице
#вопросы #собеседование
В таблице
weather в столбце t содержатся следующие значения:2
-3
4
-4
0
Напишите один запрос для вычисления суммы всех положительных, а также суммы всех отрицательных значений t.#вопросы #собеседование
Ответ на #вопрос18
SELECT
#вопросы #собеседование
SELECT
SUM (CASE WHEN t>0 THEN t ELSE 0 END) sum_pos,
SUM (CASE WHEN t<0 THEN t ELSE 0 END) sum_neg
FROM weather;#вопросы #собеседование
Друзья, для тех из вас кто хочет проверить свои знания в SQL запросах - в канале @sqlquestions сейчас как раз идет марафон SQL-задач.
Telegram
SQL задачи
Друзья, мы начинаем SQL марафон - серию задач по SQL.
Будет 15 задач.
1 задача в неделю.
Свои решения присылайте в комментариях к задачам. По итогу 15 задач, каждый увидит, сколько он смог решить правильно сам.
Мы создали для вас небольшой снипет(отрывок)…
Будет 15 задач.
1 задача в неделю.
Свои решения присылайте в комментариях к задачам. По итогу 15 задач, каждый увидит, сколько он смог решить правильно сам.
Мы создали для вас небольшой снипет(отрывок)…
Трюк дня. Транспонирование колонки в строку в PostgreSQL
Таблица
Код создания таблицы смотрите здесь.
#tips
Таблица
schools содержит следующие данные:id grade_1_cnt grade_2_cnt
1 10 11
2 21 22
3 33 34
Напишите PostgreSQL запрос, который возвратит следующий результат:id key count
1 1 10
1 2 11
2 1 21
2 2 22
3 1 33
3 2 34
Решение будет вечером. Код создания таблицы смотрите здесь.
#tips
👍1
В таблице есть колонка price со следующими значениями: {10, 20, 30, NULL}. Каким будет результат выполнения функции AVG (price)?
Anonymous Quiz
40%
20
16%
15
27%
Ошибка: агрегатные функции не могут быть использованы для записей со значениями NULL
8%
NULL
9%
Посмотреть ответы
#вопрос19
Отработает ли данный SQL запрос или упадет с ошибкой:
Отработает ли данный SQL запрос или упадет с ошибкой:
DELETE FROM table1 HAVING COUNT (field1) > 1#вопросы #собеседование
Ответ на #вопрос19
Запрос не отработает.
Конструкция
Она используется только при операции
#вопросы #собеседование
Запрос не отработает.
Конструкция
HAVING не может использоваться при удалении строк. Она используется только при операции
SELECT и чаще всего вместе с группировкой строк (GROUP BY). #вопросы #собеседование