ar
Feedback
Пишем на SQL

Пишем на SQL

الذهاب إلى القناة على Telegram

Уроки по SQL. Изучаем базы данных на примере СУБД ORACLE, MySQL, MS SQL Server, PostgreSql Мой курс по SQL и базам данных: https://prime-soft.biz/courses/sql Связь со мной @iliahohlov

إظهار المزيد
1 891
المشتركون
+124 ساعات
-47 أيام
-630 أيام
أرشيف المشاركات
Сколько строк вернёт следующий запрос: SELECT * FROM VOUCHERS WHERE ID_CODE IN (1, NULL)
Anonymous voting

В базе данных есть таблица VOUCHERS, в которой, среди прочих, есть столбец ID_CODE, определённый как INT NOT NULL. В таблице всего три строки со значением 1 (один) в этом столбце, у остальных строк в этом столбце другое значение.

Всем доброго вечера! Наконец, нашёл время разобрать решение предыдущей задачи, присланное Виталием! Виталий, спасибо за участие! Изначально собирался подготовить небольшое видео разбора решения (именно видео), но, в итоге, решил ограничиться текстовым вариантом. Надеюсь не повлияет на восприятие. Начинается решение с созданием CTE (временной таблицы данных, которой будет дано собственное имя и которая будет "жить" пока выполняется скрипт получения данных). Про CTE я уже записывал небольшое видео здесь: https://youtu.be/xuoIfDBKI7I Инструкция WITH отбирает в набор данных счета, с даты открытия по дату закрытия которых прошло более одного дня. При отсутствии даты закрытия рассчитывается по текущую дату. И называется это потом "t". И вот дальше самое интересное 😀 к полученному набору данных "t" коннектятся данные этого же набора данных своего клиента по количеству раз, равным количеству месяцев, на протяжении которых был открыт счёт. Может быть здесь немного переделать и соединять по идентификатору счета (должен же быть такой столбец в таблице счетов)? Очень любопытно: ORACLE оценил план выполнения запроса как достаточно нетрудоёмкий, но я не смог дождаться результата выполнения запроса (ждал более 10ти минут). Я бы, всё же, немного переделал запрос по части размноживания (дублирования) строк каждого счета по количеству месяцев в котором он был открыт на способ с помощью обычного джоина. К таблице счетов, или CTE с именем "t" можно приджоинить динамически созданную таблицу месяцев. К каждому счету можно приджоинить столько месяцев, сколько счёт был открыт. То есть идея такая же, но использование обычного джоина заместо сложного CONNET BY заметно (иногда очень заметно) упростит выполнение запроса! Спасибо большое за внимание к задаче и участие в её решении!

Всем доброго вторника! По предыдущей задаче скоро возьму и сделаю видеоразбор единственного присланного решения! Интересное решение придумал Виталий! Кто-то попытался вникнуть в то, как была решена задача? 😉 Мощно, да?! Скоро сделаю видеоразбор!

Доброе утро, друзья! Всем хорошего понедельника и продуктивной недели! Спасибо, что продолжаете делиться интересными задачами по SQL. Предлагаю поучаствовать в решении ещё одной задачи, которая поступила в прошлую пятницу. Текст задачи немного переделал и конкретезировал. Дана таблица ACCOUNTS, содержащая данные о счетах клиентов (у клиента может быть несколько счетов). Среди прочих, в таблице ACCOUNTS есть следующие важные для нас столбцы:         ID_CLIENT - идентификатор клиента         DT_OPEN – дата открытия счета         DT_CLOSE – дата закрытия счета Если дата закрытия счёта не заполнена (содержит значение NULL), то счет открыт на текущий день. Требуется написать SQL-запрос, который должен посчитать количество клиентов с открытым счетом помесячно. Учитывать только счета, которые были открыты более одного дня. При решении нельзя использовать оператор DISTINCT. Если счёт открыт в марте и закрыт в мае, то клиент с таким счетом должен войти в количество клиентов с открытым счетом во всех месяцах с марта по май включительно. Отчёт должен быть вида: Год      Месяц        Колво откр.клиентов 2005    январь         23 2005    февраль      89 2005    март            167 .... Попозже опубликую один из вариантов решения!

Всех доброй пятницы и хороших выходных!

Видео от Ilia Khokhlov

В таблице ORDER_ITEMS нет строк со значением 10 в столбце ID_ORDER. Результат выполнения обеих запросов:
Anonymous voting

Добрый день, друзья! Предлагаю очередную задачу по 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. Работодатель, перед собеседованием скинул мне на почту задания по SQL, которые я с легкостью решила. Хочу вам сказать, человеческое спасибо, за то, что вы так доходчиво объясняли материал (а курсов по SQL, я пересмотрела много). Также благодарю Юлию, которая мне помогала с домашними заданиями. После ваших курсов, после полученного багажа знаний, я начала изучать Python, хочу отметить, что я с таким наслаждением слушала преподавателя, потому что мне, основные термины в программировании были понятны, тоесть я не лезла в интернет, что бы находить значение слов, а с удовольствием слушала лектора и получала новые знания. В понедельник приступаю к новой работе, работать буду с sql. Я выросла на ступень выше. Благодарю вас за ваш талант преподавателя. Успехов вам в вашей работе и семейного счастья.

Select Round (p.Width * p.Length * p.Height) * p.Items_Count  Total_Size1,             Round (p.Width * p.Length * p.Height * p.Items_Count)  Total_Size2   From Positions p
Anonymous voting

Всем доброго понедельника! Предлагаю очередную интересную задачу. В этот раз не столько на знания SQL, сколько на знания основ математики. Могут ли быть при каких-либо значениях ширины (столбец Width), длины (Столбец Length) или высоты (столбец Height) разными значения в столбцах Total_Size1 и Total_Size2? (Запрос ниже...)

Спасибо всем за отличные решения! В нашем случае мы переводили числовые значения года и месяца столбца PERIOD таблицы TABLE_KOEF к ДАТЕ, потому что к датам можно очень легко прибавить месяц (или указанное количество месяцев). Далее обратно преобразовывали полученные даты (в которых было уже на месяц больше) в числовой формат, состоящий опять из номера года и месяца. Полученные расчётные значения мы использовали для соединения с таблицей TABLE_INVOICES. Решили как раз способом, который написал Georgi Fofanov. Только нам нужно было месяц прибавить к тому, что имелось в столбце PERIOD таблицы TABLE_KOEF. Способ просто прибавить число 1 к значениям столбца PERIOD не подходит, так как, например, прибавление 1 к значению 202312 даст 13ый месяц, а, в этом случае, нам необходимо прибавление года, а значение месяца должно быть единичкой. Способ с применением аналитических функций, позволяющих брать значение коэффициента со смещением строки, к сожалению, не рассматривали, так как для некоторых значениев PERIOD коэффициенты могли отсутствовать. Эту деталь, к сожалению, не написал в постановке задачи. Ещё раз всех благодарю за участие!

Сегодня помогал представителю клиента из Германии с одним запросом. Предлагаю аналогичную задачу и Вам (для гуру): Есть таблица, содержащая некоторые суммы начислений, пусть называется TABLE_INVOICES, имеющая, среди прочих, следующие поля: ... PERIOD NUMBER, AMOUNT NUMBER, ... В них хранится информация вида: PERIOD AMOUNT 202403 100.78 202404 90.12 202405 200.51 ... В столбце PERIOD значение года и месяца. И ещё есть таблица подготовленных коэффициентов для каждого месяца, пусть называется TABLE_KOEF. Имеет, по аналогии с предыдущей таблицей, тоже столбец PERIOD, содержащий год и месяц. Содержит информацию вида: PERIOD KOEF 202402 1 202403 0.5 202404 0.75 В таблице TABLE_KOEF столбец PERIOD является первичным ключом. И теперь что нужно сделать: вывести все записи из таблицы TABLE_INVOICES, и для каждой строки рассчитать произведение значения столбца AMOUNT на коэффициент предыдущего месяца из таблицы TABLE_KOEF. Буду рад Вашему активному участию! Буду ждать решения и вопросы (если что-то не понятно написал).

Спасибо всем за активное участие! Первый вариант решения предыдущей задачи - это использование оператора MINUS (EXCEPT в MS SQL Server). С помощью оператора MINUS можно вычесть из набора данных, полученным одним SELECT-ом, строки, полученные другим SELECT-ом: SELECT * FROM TABLE_A MINUS SELECT * FROM TABLE_B Ещё одним простым решением этой задачи будет использование LEFT JOIN-а для проверки наличия данных для таблицы TABLE_A в таблице TABLE_B.

Всем доброго понедельника! Решим интересную задачу по SQL? Даны две таблицы TABLE_A и TABLE_B. В каждой таблице есть всего один столбец: ID типа NUMBER, содержащий числовые значения. В первой таблице в столбце ID значения: 10 20 30 40 50 Во второй таблице в столбце ID значения: 10 30 50. Необходимо написать запрос, выбирающий значения столбца ID таблицы TABLE_A, которых нет в таблице TABLE_B. При этом запрос нужно написать не используя NOT. Способы решения задачи напишу, как всегда, попозже!

Добрый день, друзья! Следующий вопрос для специалистов ORACLE. В базе данных есть некоторая таблица со столбцом DATE_CREATE с типом DATE. Можно ли в этом столбце сохранить значение даты со временем, например 23.05.2024 13:14:00?
Anonymous voting

По курсу Программирования в PL/SQL (ORACLE)
Anonymous voting

Подскажите, пожалуйста, в какое время Вам было бы удобно активное участие в вебинарах? По курсу SQL. Базы данных. ORA­CLE. MS SQL Server. MySql
Anonymous voting

Пишем на SQL - إحصائيات وتحليلات قناة تيليجرام @sql_oracle_databases