Горячее
Лучшее
Свежее
Подписки
Сообщества
Блоги
Эксперты
Войти
Забыли пароль?
или продолжите с
Создать аккаунт
Я хочу получать рассылки с лучшими постами за неделю
или
Восстановление пароля
Восстановление пароля
Получить код в Telegram
Войти с Яндекс ID Войти через VK ID
Создавая аккаунт, я соглашаюсь с правилами Пикабу и даю согласие на обработку персональных данных.
ПромокодыРаботаКурсыРекламаИгрыПополнение Steam
Пикабу Игры +1000 бесплатных онлайн игр
Управляйте маятником, чтобы построить самую высокую (и устойчивую) башню из падающих сверху постов. Следите за временем на каждый бросок по полоске справа: если она закончится, пост упадет мимо башни.

Башня

Аркады, Строительство, На ловкость

Играть

Топ прошлой недели

  • AlexKud AlexKud 38 постов
  • SergeyKorsun SergeyKorsun 12 постов
  • SupportHuaport SupportHuaport 5 постов
Посмотреть весь топ

Лучшие посты недели

Рассылка Пикабу: отправляем самые рейтинговые материалы за 7 дней 🔥

Нажимая кнопку «Подписаться на рассылку», я соглашаюсь с Правилами Пикабу и даю согласие на обработку персональных данных.

Спасибо, что подписались!
Пожалуйста, проверьте почту 😊

Помощь Кодекс Пикабу Команда Пикабу Моб. приложение
Правила соцсети О рекомендациях О компании
Промокоды Биг Гик Промокоды Lamoda Промокоды МВидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня

Oracle + Программирование

С этим тегом используют

SQL IT Собеседование База данных Mysql Postgresql Программист IT юмор Разработка Python Картинка с текстом Юмор Все
27 постов сначала свежее
14
IliaHohlov
IliaHohlov
10 месяцев назад
Лига программистов

Задача по SQL с неочевидным решением⁠⁠

Задача по SQL с неочевидным решением IT, Программирование, Собеседование, Тестирование, Фриланс, SQL, Oracle, Программист, Ms SQL, Mysql, Postgresql, Postgres, База данных, Длиннопост

Здравствуй, уважаемый читатель! Спасибо, что заходишь ко мне на канал и изучаешь SQL со мной!

Недавно нашёл в интернете достаточно простую задачу с собеседования по SQL, в которой нужно было составить запрос к таблицам. Ссылку на источник размещу ниже. В своём Телеграм канале, где мы решаем разные задачи с собеседований и разбираем практические ситуации, я предложил всем поучаствовать в её решении. Надеюсь, тебе будет тоже интересно попробовать её решить. Ниже описание задачи.

В базе данных есть таблица анализов Analysis, имеющая следующие столбцы: an_id — ID анализа; an_name — название анализа; an_price — цена анализа; an_group — группа анализов. Есть, также, таблица заказов Orders: ord_id — ID заказа; ord_datetime — дата и время заказа; ord_an — ID анализа. Необходимо вывести название и цену для всех анализов, которые продавались 5 февраля 2020 и всю следующую неделю.

Тут сделай паузу и попробуй сначала сам решить задачу.

Итак, надеюсь, ты делал паузу и составил SQL-запрос. Далее будем решать вместе.

Напомню, что нужно было вывести список анализов и их цену, которые продавались 05.02.2022 и всю следующую неделю.

Первым решением напрашивается соединение таблицы анализов и таблицы продаж с применением условия на период. Кстати, именно это и указано в качестве ответа на задачу.

На самом деле, из-за того, что один анализ за выбираемый интервал времени мог быть продан сколько угодно раз (один и тот же анализ мог быть продан хоть тысячу раз и больше) заместо соединения таблицы анализов с таблицей заказов, я бы предложил использование EXISTS:

select  a.an_name, a.an_cost from  analysis a where  exists (select 1 from orders  where ord_an = a.an_id  and ord_datetime between to_date('05.02.2022', 'dd.mm.yyyy') and to_date('05.02.2022', 'dd.mm.yyyy') + 7)

Благодаря тому, что мы не джоинили анализы с их заказами, в результирующей таблице анализы не замножатся по количеству присоединившихся к ним заказов. То есть в результате мы получим:

Задача по SQL с неочевидным решением IT, Программирование, Собеседование, Тестирование, Фриланс, SQL, Oracle, Программист, Ms SQL, Mysql, Postgresql, Postgres, База данных, Длиннопост

а не:

Задача по SQL с неочевидным решением IT, Программирование, Собеседование, Тестирование, Фриланс, SQL, Oracle, Программист, Ms SQL, Mysql, Postgresql, Postgres, База данных, Длиннопост

В примере, что я нашёл в интернете (ссылка ниже), помимо названий анализов и их стоимостей, выведен ещё и столбец с датами заказов. По условиям задачи вывод этого столбца не запрашивался. Не требовался вывод никакой информации о заказах/продажах. Поэтому и надобности в соединении я не усмотрел. Наоборот, это и потенциально замножит вывод анализов, которые покупали в запрашиваемый период, и прибавит лишнюю работу СУБД.

Ссылка на источник: https://tproger.ru/articles/5-zadanij-po-sql-s-realnyh-sobesedovanij

Поддержи статью лайком или подпиской!

Ещё больше интересных практических задач по SQL и задач с собеседований в нашем Телеграмм-канале и в интернете :)

Показать полностью 3
[моё] IT Программирование Собеседование Тестирование Фриланс SQL Oracle Программист Ms SQL Mysql Postgresql Postgres База данных Длиннопост
8
2
IliaHohlov
IliaHohlov
10 месяцев назад
Лига программистов

Задачи с собеседования по SQL⁠⁠1

Всем привет!

Продолжаем разбирать SQL задачи с собеседований с нашего Телеграм-канала!

В базе данных есть таблица TMP_TABLE, имеющая всего два столбца и содержащая следующие данные:

TMP_TABLE

column1 column2

-----------------------------------------

12 12

NULL 13

12 14

NULL NULL

13 15

Какое значение вернёт следующий запрос?

SELECT COUNT(*) FROM TMP_TABLE

Задачи с собеседования по SQL Программирование, Собеседование, IT, SQL, Задача, Аналитика, База данных, Ms SQL, Oracle, Postgresql, Postgres, Mysql, Тестирование, Telegram (ссылка)
Показать полностью 1
[моё] Программирование Собеседование IT SQL Задача Аналитика База данных Ms SQL Oracle Postgresql Postgres Mysql Тестирование Telegram (ссылка)
68
0
IliaHohlov
IliaHohlov
10 месяцев назад
Лига программистов

ЗАДАЧИ ПО SQL⁠⁠

Всем доброго понедельника!

Как насчёт очередной небольшой задачи по SQL с нашего Телеграм-канала?

В таблице INVOICES две строки. В первой строке в столбце QTY число 25, во второй строке в этом же столбце лежит NULL.

Какой будет результат запроса?

SELECT SUM(QTY) FROM INVOICES

ЗАДАЧИ ПО SQL Программирование, IT, Собеседование, SQL, Oracle, Postgresql, Mysql, Тестирование, Программист, Telegram (ссылка)
Программирование IT Собеседование SQL Oracle Postgresql Mysql Тестирование Программист Telegram (ссылка)
35
IliaHohlov
IliaHohlov
11 месяцев назад
Лига программистов

ЗАДАЧА-ТЕСТ ПО SQL⁠⁠

Всем привет!

Как насчет небольшой задачи по SQL с нашего Телеграм-канала? По сложности назначаю 1 звёздочку из пяти! Проверьте себя, ничего не забыли из основы основ? И внимательно читаем условие задачи, ато обидно будет ответить не правильно на достаточно простой задаче 😉

Таблица PERS определена следующим образом:

(ID NUMBER NOT NULL PRIMARY KEY,

NAME VARCHAR(100) NOT NULL)

Запрос

SELECT COUNT(*) FROM PERS WHERE NAME = 'Иванов Иван Иванович'

возвращает число 2.

Сколько строк вернёт следующий запрос?

SELECT DISTINCT ID, NAME FROM PERS WHERE NAME = 'Иванов Иван Иванович'

ЗАДАЧА-ТЕСТ ПО SQL IT, Собеседование, Программирование, SQL, Oracle, Mysql, База данных, Telegram (ссылка)
Показать полностью 1
IT Собеседование Программирование SQL Oracle Mysql База данных Telegram (ссылка)
33
37
IliaHohlov
IliaHohlov
1 год назад
Лига программистов

Задачи на собеседовании по SQL⁠⁠

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Здравствуй, уважаемый читатель!

Сегодня разбираем решение последней практической задачи по SQL, которую опубликовал в нашем Telegram-канале, с которой, кстати, справился только один из участников нашей группы!

Вначале напомню что нужно было решить:

Дана таблица ACCOUNTS, содержащая данные о счетах клиентов (у клиента может быть несколько счетов). Среди прочих, в таблице ACCOUNTS есть следующие важные для нас столбцы:
ID_CLIENT - идентификатор клиента
DT_OPEN – дата открытия счета
DT_CLOSE – дата закрытия счета

Если дата закрытия счёта не заполнена (содержит значение NULL), то счёт открыт на текущий день.

Требуется написать SQL-запрос, который должен посчитать количество клиентов с открытым счётом помесячно. Учитывать только счета, которые были открыты более одного дня. При решении нельзя использовать оператор DISTINCT.

Если счёт открыт в марте и закрыт в мае, то клиент с таким счётом должен войти в количество клиентов с открытым счётом во всех месяцах с марта по май включительно.

Отчёт должен быть вида:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

SQL-файл для создания таблицы ACCOUNTS с тестовыми данными я подготовил для тебя здесь: https://prime-soft.biz/std/sql/240701.zip

Приступаем к решению!

Так как нам нужно вывести количество клиентов в каждом месяце, у которых есть хотя бы один открытый счёт, то сразу приходится принимать во внимание то, что могут быть месяца, в которых ни один счёт не открывался, но были действующие ранее открытые счета (открыты месяцами ранее). Поэтому, основной таблицей, из которой будем выбирать данные, предлагаю сделать таблицу всех возможных месяцев. И уже к этой таблице (со списком месяцев) сможем приджоинить и посчитать количество клиентов, у которых есть хотя бы один открытый счёт в месяце таблицы.

Таблицу всех месяцев всех лет в условии задачи нам не озвучили (возможно такой таблицы в базе данных и нет), поэтому сформируем её сами налету (динамически). Сделаем, чтобы в таблице были все месяца, начиная с самого первого, в котором открылся первый счёт, заканчивая текущим месяцем (он рассчитается на основе текущей даты).

Возьмём дату самого ранее открытого счета:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Месяц этой даты и будет первым месяцем в формируемой нами динамической таблицы месяцев. С помощью CONNECT BY зациклим прибавление к этому месяцу столько месяцев, пока не дойдём до месяца текущей даты:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Нам нужен и самый первый месяц (месяц самой ранней даты открытия счета) и текущий месяц включительно. Для каждого месяца выведем первый и последний день (далее, в результирующей таблице эти столбцы можно будет в блоке SELECT не выводить). Первый и последний дни каждого месяца нам будут нужны для упрощения джоина таблицы счетов (см.ниже):

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Получили таблицу всех месяцев. Назовём её periods (см. скриншот ниже). Я думаю, это было самое сложное. Теперь к каждому месяцу приджоиним счета, бывшие открытыми минимум один день в месяце: дата их открытия должна быть строго до последнего дня месяца (вдумайся!), а дата закрытия никак не может быть раньше начала месяца. Если счёт закрыт до даты начала какого-то месяца, то этот счёт может быть виден в более раннем месяце.

Анекдот:

- Бог даёт каждому только такие проблемы, с которыми он может справиться. Поэтому, либо он с этим справится, либо это не его проблемы.

Не забываем учитывать только счета, которые были открытыми минимум один день. Если дата закрытия счёта не указана, то счёт всё ещё открыт на текущий день. Клиент такого счёта будет учтён во всех месяцах, начиная с месяца открытия по текущий:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Вначале решим задачу, используя DISTINCT (чтобы увидеть, насколько это проще). Сгруппируем полученную таблицу данных по месяцам (по годам и месяцам), подсчитывая сколько в каждом месяце клиентов, у которых есть хотя бы один открытый счёт. С помощью DISTINCT каждый клиент посчитается только один раз. Для того, чтобы месяца выводились по порядку, добавим ещё и сортировку с помощью ORDER BY:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Получим:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Теперь тоже самое сделаем без DISTINCT, как от нас и хотели по условию задачи. Для этого вначале сгруппируем по месяцам и клиентам (так мы получим каждого клиента в каждом месяце только один раз).

Затем сгруппируем полученную таблицу данных ещё раз, но теперь только по месяцам. Можно смело подсчитать клиентов по каждому месяцу без DISTINCT. Теперь-то каждый клиент в любом месяце числится только один раз. Итого, вот решение:

Задачи на собеседовании по SQL SQL, Oracle, Собеседование, IT, Программирование, Длиннопост

Результат выполнения запроса будет таким же как на предыдущем скриншоте:

Поддержи статью лайком или подпиской!

Ещё больше интересных практических задач по SQL и задач с собеседований в нашем Телеграмм-канале.

Показать полностью 8
[моё] SQL Oracle Собеседование IT Программирование Длиннопост
8
22
IliaHohlov
IliaHohlov
1 год назад
Лига программистов

Задачи с собеседования по SQL про псевдостолбцы⁠⁠

Задачи с собеседования по SQL про псевдостолбцы Программирование, IT, Собеседование, База данных, Oracle, Mysql, Ms SQL, Postgresql, SQL, Длиннопост

Здравствуйте, друзья!

Готовы порешать SQL-задачи на тему псевдостолбцов? Что такое псевдостолбцы и примеры их использования можно почитать тут.

Эти и другие задачи с собеседования опубликованы в нашем Телеграм-канале.

Итак, задача номер 1:

В таблице TEMP_TABLE один столбец и пять строк.
Запрос SELECT 1 FROM TEMP_TABLE

а) выведет данные из первого столбца для всех строк;

б) выведет просто цифру 1;

в) выведет пять строк, в каждой из которых будет цифра 1;

г) выдаст ошибку.

Здесь нужно поставить чтение на паузу и выбрать правильный вариант ответа.
На сегодня разброс ответов на задачу такой (правильный ответ в зелёном цвете):

Задачи с собеседования по SQL про псевдостолбцы Программирование, IT, Собеседование, База данных, Oracle, Mysql, Ms SQL, Postgresql, SQL, Длиннопост

Объяснение: данный в задаче запрос выводит данные из таблицы TEMP_TABLE (так как SELECT..FROM TEMP_TABLE), поэтому будут выводиться строки из неё (все сколько есть). Но в блоке SELECT не указан ни один из (настоящих) столбцов таблицы. Не выбираются данные из какого-либо столбца.
В нашем примере указано что пока выводятся строки из таблицы TEMP_TABLE нужно выводить цифру 1, а не показывать данные какого-либо столбца.

Задача 2:
Дана следующая таблица TEST_TABLE с тремя строками:
SELECT * FROM TEST_TABLE
ID  NAME
1  NULL
2  NULL
3  NULL
Каков будет результат следующего запроса: SELECT SUM(1) FROM TEST_TABLE?

Здесь опять нужно поставить чтение на паузу и написать правильный вариант ответа. На сегодня разброс ответов на задачу такой (правильный ответ в зелёном цвете):

Задачи с собеседования по SQL про псевдостолбцы Программирование, IT, Собеседование, База данных, Oracle, Mysql, Ms SQL, Postgresql, SQL, Длиннопост

Объяснение: здесь тоже речь идёт о псевдостолбце. Пока выводятся данные из TEST_TABLE блок SELECT выводит единицу, а не какой-либо реальный столбец таблицы. Пока не смотрите на функцию SUM. Итого единица выведется три раза (по количеству строк в таблице). И вот теперь, с помощью функции SUM получим сумму всех введённых чисел (единичек), то есть число 3.

Ещё больше SQL-задач с собеседований и реальной практики в разных СУБД в нашем Телеграм-канале.

Заходи на наш Youtube-канал и найдёшь много интересного и полезного про базы данных и язык SQL.

Показать полностью 2
[моё] Программирование IT Собеседование База данных Oracle Mysql Ms SQL Postgresql SQL Длиннопост
0
45
IliaHohlov
IliaHohlov
1 год назад
Лига программистов

SQL задача про IN и NOT IN с объяснением⁠⁠

SQL задача про IN и NOT IN с объяснением Программирование, IT, Собеседование, SQL, Ms SQL, Oracle, Субд, База данных, Telegram (ссылка)

Всем отличного начала нового года! Вчера утром в своём Телеграм-канале опубликовал интересную задачу по SQL с собеседования про IN и NOT IN.

С первого взгляда кажущееся правильным решение на самом деле ложно. Чтобы верно ответить в задаче, нужно знать как СУБД обрабатывает элементы множества, указанные для оператора IN / NOT IN в запросе.

Вначале вот текст самой задачи. Ниже я поясню правильное решение:

В таблице CLIENTS пять строк. В первых двух строках в поле CLIENT_TYPE значение 1, ещё в двух строках в CLIENT_TYPE значение 2 и в последней строке поле CLIENT_TYPE не заполнено, то есть в последней строке в поле CLIENT_TYPE значение NULL.

Есть два запроса:
1)
SELECT * FROM CLIENTS WHERE CLIENT_TYPE IN (1)
2)
SELECT * FROM CLIENTS WHERE CLIENT_TYPE NOT IN (2, NULL)
Результирующие наборы данных, полученные в результате выполнения этих запросов, будут одинаковыми или разными?

Здесь поставь чтение на паузу и ответь на вопрос самостоятельно.

На сегодня на канале следующий разброс ответов:

SQL задача про IN и NOT IN с объяснением Программирование, IT, Собеседование, SQL, Ms SQL, Oracle, Субд, База данных, Telegram (ссылка)

Первый запрос отбирает клиентов, у которых в столбце тип указано значение 1. В результате будут отобраны две строки. Здесь все понятно. Так как в таблице клиентов ещё остаются строки, не попавшие в выбор первого запроса, со значениями в столбце тип 2 и NULL, то видится, что второй запрос должен как раз вернуть такой же результирующий набор данных. Однако, тут дело в коварном NULL в значениях для оператора NOT IN. СУБД представляет оператор NOT IN:

SELECT * FROM CLIENTS WHERE CLIENT_TYPE NOT IN (2, NULL)

в результате должны быть отобраны клиенты, у которых значение в столбце тип не равно каждому из перечисленных во множестве значений:

SELECT * FROM CLIENTS WHERE ( (CLIENT_TYPE <> 2) AND (CLIENT_TYPE <> NULL) )

С NULL не допустимо использовать операторы сравнения. При сравнении с NULL (= NULL, <> NULL) результат будет всегда отрицательным.

Второй запрос не вернёт ни одной строки данных.

Ещё больше полезного и интересного в моём Телеграмм-Канале.

Показать полностью 1
Программирование IT Собеседование SQL Ms SQL Oracle Субд База данных Telegram (ссылка)
18
8
IliaHohlov
IliaHohlov
1 год назад
Лига программистов

Программирование в PL/SQL (ORACLE). Массивы, Циклы⁠⁠

Уроки программирования в PL/SQL (ORACLE). Разбираем задачу с массивами, циклами. Оптимизация решения, поиск ошибок.

[моё] Программирование Собеседование IT SQL Oracle Видео YouTube
3
Посты не найдены
О нас
О Пикабу Контакты Реклама Сообщить об ошибке Сообщить о нарушении законодательства Отзывы и предложения Новости Пикабу Мобильное приложение RSS
Информация
Помощь Кодекс Пикабу Команда Пикабу Конфиденциальность Правила соцсети О рекомендациях О компании
Наши проекты
Блоги Работа Промокоды Игры Курсы
Партнёры
Промокоды Биг Гик Промокоды Lamoda Промокоды Мвидео Промокоды Яндекс Директ Промокоды Отелло Промокоды Aroma Butik Промокоды Яндекс Путешествия Постила Футбол сегодня
На информационном ресурсе Pikabu.ru применяются рекомендательные технологии