Добрый вечер, дорогие друзья!
Хочу поделиться новым отзывом, который недавно получили от одного из наших учеников! С разрешения ученика публикую его здесь!
Здравствуйте, Илья. Меня Шолпан зовут. Я ваша бывшая студентка. Сегодня я получила оффер (как сейчас модно говорить). Моя работа будет связана непосредственно с SQL. Работодатель, перед собеседованием скинул мне на почту задания по SQL, которые я с легкостью решила. Хочу вам сказать, человеческое спасибо, за то, что вы так доходчиво объясняли материал (а курсов по SQL, я пересмотрела много). Также благодарю Юлию, которая мне помогала с домашними заданиями. После ваших курсов, после полученного багажа знаний, я начала изучать Python, хочу отметить, что я с таким наслаждением слушала преподавателя, потому что мне, основные термины в программировании были понятны, тоесть я не лезла в интернет, что бы находить значение слов, а с удовольствием слушала лектора и получала новые знания.
В понедельник приступаю к новой работе, работать буду с sql. Я выросла на ступень выше. Благодарю вас за ваш талант преподавателя. Успехов вам в вашей работе и семейного счастья.
Хочу поделиться новым отзывом, который недавно получили от одного из наших учеников! С разрешения ученика публикую его здесь!
Здравствуйте, Илья. Меня Шолпан зовут. Я ваша бывшая студентка. Сегодня я получила оффер (как сейчас модно говорить). Моя работа будет связана непосредственно с SQL. Работодатель, перед собеседованием скинул мне на почту задания по SQL, которые я с легкостью решила. Хочу вам сказать, человеческое спасибо, за то, что вы так доходчиво объясняли материал (а курсов по SQL, я пересмотрела много). Также благодарю Юлию, которая мне помогала с домашними заданиями. После ваших курсов, после полученного багажа знаний, я начала изучать Python, хочу отметить, что я с таким наслаждением слушала преподавателя, потому что мне, основные термины в программировании были понятны, тоесть я не лезла в интернет, что бы находить значение слов, а с удовольствием слушала лектора и получала новые знания.
В понедельник приступаю к новой работе, работать буду с sql. Я выросла на ступень выше. Благодарю вас за ваш талант преподавателя. Успехов вам в вашей работе и семейного счастья.
🔥21👍9
Добрый день, друзья!
Предлагаю очередную задачу по SQL. Есть два запроса.
Запрос 1:
SELECT o.*,
(SELECT COUNT(*)
FROM ORDER_ITEMS
WHERE ID_ORDER = o.ID) AS COUNT_ITEMS
FROM ORDERS o
WHERE o.ID = 10
Запрос 2:
SELECT o.*,
COALESCE( (SELECT COUNT(*)
FROM ORDER_ITEMS
WHERE ID_ORDER = o.ID), 0) AS COUNT_ITEMS
FROM ORDERS o
WHERE o.ID = 10
Предлагаю очередную задачу по SQL. Есть два запроса.
Запрос 1:
SELECT o.*,
(SELECT COUNT(*)
FROM ORDER_ITEMS
WHERE ID_ORDER = o.ID) AS COUNT_ITEMS
FROM ORDERS o
WHERE o.ID = 10
Запрос 2:
SELECT o.*,
COALESCE( (SELECT COUNT(*)
FROM ORDER_ITEMS
WHERE ID_ORDER = o.ID), 0) AS COUNT_ITEMS
FROM ORDERS o
WHERE o.ID = 10
👍5
В таблице ORDER_ITEMS нет строк со значением 10 в столбце ID_ORDER. Результат выполнения обеих запросов:
Anonymous Quiz
56%
будет одинаков
44%
будет разный
Доброе утро, друзья!
Всем хорошего понедельника и продуктивной недели!
Спасибо, что продолжаете делиться интересными задачами по SQL.
Предлагаю поучаствовать в решении ещё одной задачи, которая поступила в прошлую пятницу. Текст задачи немного переделал и конкретизировал.
Дана таблица ACCOUNTS, содержащая данные о счетах клиентов (у клиента может быть несколько счетов). Среди прочих, в таблице ACCOUNTS есть следующие важные для нас столбцы:
ID_CLIENT - идентификатор клиента
DT_OPEN – дата открытия счета
DT_CLOSE – дата закрытия счета
Если дата закрытия счёта не заполнена (содержит значение NULL), то счет открыт на текущий день.
Требуется написать SQL-запрос, который должен посчитать количество клиентов с открытым счетом помесячно. Учитывать только счета, которые были открыты более одного дня. При решении нельзя использовать оператор DISTINCT.
Если счёт открыт в марте и закрыт в мае, то клиент с таким счетом должен войти в количество клиентов с открытым счетом во всех месяцах с марта по май включительно.
Отчёт должен быть вида:
Год Месяц Колво откр.клиентов
2005 январь 23
2005 февраль 89
2005 март 167
....
Попозже опубликую один из вариантов решения!
Всем хорошего понедельника и продуктивной недели!
Спасибо, что продолжаете делиться интересными задачами по SQL.
Предлагаю поучаствовать в решении ещё одной задачи, которая поступила в прошлую пятницу. Текст задачи немного переделал и конкретизировал.
Дана таблица ACCOUNTS, содержащая данные о счетах клиентов (у клиента может быть несколько счетов). Среди прочих, в таблице ACCOUNTS есть следующие важные для нас столбцы:
ID_CLIENT - идентификатор клиента
DT_OPEN – дата открытия счета
DT_CLOSE – дата закрытия счета
Если дата закрытия счёта не заполнена (содержит значение NULL), то счет открыт на текущий день.
Требуется написать SQL-запрос, который должен посчитать количество клиентов с открытым счетом помесячно. Учитывать только счета, которые были открыты более одного дня. При решении нельзя использовать оператор DISTINCT.
Если счёт открыт в марте и закрыт в мае, то клиент с таким счетом должен войти в количество клиентов с открытым счетом во всех месяцах с марта по май включительно.
Отчёт должен быть вида:
Год Месяц Колво откр.клиентов
2005 январь 23
2005 февраль 89
2005 март 167
....
Попозже опубликую один из вариантов решения!
Всем доброго понедельника!
Предлагаю возможное решение предыдущей задачи!
https://dzen.ru/a/ZoKhIU31g0FJOl8a
Предлагаю возможное решение предыдущей задачи!
https://dzen.ru/a/ZoKhIU31g0FJOl8a
Дзен | Статьи
Задачи на собеседовании по SQL ⭐⭐⭐⭐
Статья автора «Илья Хохлов» в Дзене ✍: Здравствуй, уважаемый читатель!
👍2
Пишем на SQL
Доброе утро, друзья! Всем хорошего понедельника и продуктивной недели! Спасибо, что продолжаете делиться интересными задачами по SQL. Предлагаю поучаствовать в решении ещё одной задачи, которая поступила в прошлую пятницу. Текст задачи немного переделал…
Всем доброго вторника!
По предыдущей задаче скоро возьму и сделаю видеоразбор единственного присланного решения! Интересное решение придумал Виталий! Кто-то попытался вникнуть в то, как была решена задача? 😉
Мощно, да?! Скоро сделаю видеоразбор!
По предыдущей задаче скоро возьму и сделаю видеоразбор единственного присланного решения! Интересное решение придумал Виталий! Кто-то попытался вникнуть в то, как была решена задача? 😉
Мощно, да?! Скоро сделаю видеоразбор!
👍3
Всем доброго вечера!
Наконец, нашёл время разобрать решение предыдущей задачи, присланное Виталием!
Виталий, спасибо за участие!
Изначально собирался подготовить небольшое видео разбора решения (именно видео), но, в итоге, решил ограничиться текстовым вариантом. Надеюсь не повлияет на восприятие.
Начинается решение с созданием CTE (временной таблицы данных, которой будет дано собственное имя и которая будет "жить" пока выполняется скрипт получения данных). Про CTE я уже записывал небольшое видео здесь: https://youtu.be/xuoIfDBKI7I
Инструкция WITH отбирает в набор данных счета, с даты открытия по дату закрытия которых прошло более одного дня. При отсутствии даты закрытия рассчитывается по текущую дату. И называется это потом "t".
И вот дальше самое интересное 😀 к полученному набору данных "t" коннектятся данные этого же набора данных своего клиента по количеству раз, равным количеству месяцев, на протяжении которых был открыт счёт. Может быть здесь немного переделать и соединять по идентификатору счета (должен же быть такой столбец в таблице счетов)?
Очень любопытно: ORACLE оценил план выполнения запроса как достаточно нетрудоёмкий, но я не смог дождаться результата выполнения запроса (ждал более 10ти минут). Я бы, всё же, немного переделал запрос по части размноживания (дублирования) строк каждого счета по количеству месяцев в котором он был открыт на способ с помощью обычного джоина. К таблице счетов, или CTE с именем "t" можно приджоинить динамически созданную таблицу месяцев. К каждому счету можно приджоинить столько месяцев, сколько счёт был открыт. То есть идея такая же, но использование обычного джоина заместо сложного CONNET BY заметно (иногда очень заметно) упростит выполнение запроса!
Спасибо большое за внимание к задаче и участие в её решении!
Наконец, нашёл время разобрать решение предыдущей задачи, присланное Виталием!
Виталий, спасибо за участие!
Изначально собирался подготовить небольшое видео разбора решения (именно видео), но, в итоге, решил ограничиться текстовым вариантом. Надеюсь не повлияет на восприятие.
Начинается решение с созданием CTE (временной таблицы данных, которой будет дано собственное имя и которая будет "жить" пока выполняется скрипт получения данных). Про CTE я уже записывал небольшое видео здесь: https://youtu.be/xuoIfDBKI7I
Инструкция WITH отбирает в набор данных счета, с даты открытия по дату закрытия которых прошло более одного дня. При отсутствии даты закрытия рассчитывается по текущую дату. И называется это потом "t".
И вот дальше самое интересное 😀 к полученному набору данных "t" коннектятся данные этого же набора данных своего клиента по количеству раз, равным количеству месяцев, на протяжении которых был открыт счёт. Может быть здесь немного переделать и соединять по идентификатору счета (должен же быть такой столбец в таблице счетов)?
Очень любопытно: ORACLE оценил план выполнения запроса как достаточно нетрудоёмкий, но я не смог дождаться результата выполнения запроса (ждал более 10ти минут). Я бы, всё же, немного переделал запрос по части размноживания (дублирования) строк каждого счета по количеству месяцев в котором он был открыт на способ с помощью обычного джоина. К таблице счетов, или CTE с именем "t" можно приджоинить динамически созданную таблицу месяцев. К каждому счету можно приджоинить столько месяцев, сколько счёт был открыт. То есть идея такая же, но использование обычного джоина заместо сложного CONNET BY заметно (иногда очень заметно) упростит выполнение запроса!
Спасибо большое за внимание к задаче и участие в её решении!
❤1👍1
В базе данных есть таблица VOUCHERS, в которой, среди прочих, есть столбец ID_CODE, определённый как INT NOT NULL.
В таблице всего три строки со значением 1 (один) в этом столбце, у остальных строк в этом столбце другое значение.
В таблице всего три строки со значением 1 (один) в этом столбце, у остальных строк в этом столбце другое значение.
👍4
Сколько строк вернёт следующий запрос:
SELECT * FROM VOUCHERS WHERE ID_CODE IN (1, NULL)
SELECT * FROM VOUCHERS WHERE ID_CODE IN (1, NULL)
Anonymous Quiz
17%
1
56%
3
6%
0
22%
Запрос не выполнится. Будет SQL-ошибка.
👍1🔥1
Усложненная версия предыдущей задачи
В базе данных есть таблица VOUCHERS, в которой, среди прочих, есть столбец ID_CODE, определённый как NUMBER (с возможностью сохранения значений NULL).
В таблице всего пять строк.
У трёх строк значение 1 (один) в этом столбце, и ещё у двух строк значение в этом столбце NULL.
В базе данных есть таблица VOUCHERS, в которой, среди прочих, есть столбец ID_CODE, определённый как NUMBER (с возможностью сохранения значений NULL).
В таблице всего пять строк.
У трёх строк значение 1 (один) в этом столбце, и ещё у двух строк значение в этом столбце NULL.
👍2
Сколько строк вернёт следующий запрос:
SELECT * FROM VOUCHERS WHERE ID_CODE IN (1, NULL)
SELECT * FROM VOUCHERS WHERE ID_CODE IN (1, NULL)
Anonymous Quiz
30%
3
46%
5
7%
0
18%
Запрос не сможет выполняться. Будет SQL-ошибка
В каком порядке выводятся данные, получаемые SQL-запросом, если в запросе не указан ORDER BY?
- данные выводятся в таком порядке, в котором их проще вывести для СУБД. При отсутствии блока ORDER BY один и тот же запрос, запускаемый в разное время, даже может выводить одни и те же данные в разном порядке.
- данные выводятся в таком порядке, в котором их проще вывести для СУБД. При отсутствии блока ORDER BY один и тот же запрос, запускаемый в разное время, даже может выводить одни и те же данные в разном порядке.
❤6👌5🔥1
Всем привет!
А вот и задача на этот понедельник! По сложности назначаю 1 звёздочку! Проверьте себя, ничего не забыли из основы основ? И внимательно читаем условие задачи, ато обидно будет ответить не правильно на достаточно простой задаче 😉
Таблица PERS определена следующим образом:
(ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR(100) NOT NULL)
Запрос
SELECT COUNT(*)
FROM PERS
WHERE NAME = 'Иванов Иван Иванович'
возвращает число 2.
А вот и задача на этот понедельник! По сложности назначаю 1 звёздочку! Проверьте себя, ничего не забыли из основы основ? И внимательно читаем условие задачи, ато обидно будет ответить не правильно на достаточно простой задаче 😉
Таблица PERS определена следующим образом:
(ID NUMBER NOT NULL PRIMARY KEY,
NAME VARCHAR(100) NOT NULL)
Запрос
SELECT COUNT(*)
FROM PERS
WHERE NAME = 'Иванов Иван Иванович'
возвращает число 2.
🔥2
Сколько строк вернёт следующий запрос?
SELECT DISTINCT ID, NAME FROM PERS WHERE NAME = 'Иванов Иван Иванович'
SELECT DISTINCT ID, NAME FROM PERS WHERE NAME = 'Иванов Иван Иванович'
Anonymous Quiz
1%
0
29%
1
58%
2
11%
Запрос может вернуть любое количество строк
❤5👍2
Оператор DISTINCT оставляет в результирующей таблице строки с неповторимым набором значений во всех выводимых (командой SELECT) столбцах. Несмотря на то, что в столбце NAME для всех выводящихся строк значение одинаковое, в столбце ID - значение для этих строк, разное (т.к. столбец ID определён как первичный ключ). Оператор DISTINCT убрал бы вторую строку (и последующие), если бы совпали значения по всем выводящимся столбцам.
❤11👍1
Всем доброго понедельника!
А вот и ещё одна небольшая задача по SQL🙂👇
В таблице INVOICES две строки. В первой строке в столбце QTY число 25, во второй строке в этом же столбце лежит NULL.
А вот и ещё одна небольшая задача по SQL🙂👇
В таблице INVOICES две строки. В первой строке в столбце QTY число 25, во второй строке в этом же столбце лежит NULL.
Какой будет результат запроса?
SELECT SUM(QTY) FROM INVOICES
SELECT SUM(QTY) FROM INVOICES
Anonymous Quiz
68%
25
2%
0
15%
NULL
15%
Выполнение запроса приведёт к SQL ошибке
❤4