Спасибо всем за старания и участие в решении этой задачи! Полина и Александр предложили верные, хотя и разные решения задачи.
Александр, Ваше решение немного нужно доработать. В местах, где сравниваете результат работы текстовой функции REPLACE с датой, нужно результат работы REPLACE обернуть в to_date. Чтобы было сравнение одинаковых между собой типов данных.
Александр, Ваше решение немного нужно доработать. В местах, где сравниваете результат работы текстовой функции REPLACE с датой, нужно результат работы REPLACE обернуть в to_date. Чтобы было сравнение одинаковых между собой типов данных.
Вот доработанный результат:
select * from persons
where case when to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate))), 'dd.mm.yyyy') < trunc(sysdate)
then to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate)+1)), 'dd.mm.yyyy')
else to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate))), 'dd.mm.yyyy')
end between trunc(sysdate) and trunc(sysdate)+14
select * from persons
where case when to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate))), 'dd.mm.yyyy') < trunc(sysdate)
then to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate)+1)), 'dd.mm.yyyy')
else to_date(replace(to_char(birthdate, 'dd.mm.yyyy'), to_char(extract(year from birthdate)), to_char(extract(year from sysdate))), 'dd.mm.yyyy')
end between trunc(sysdate) and trunc(sysdate)+14
Вы правильно поняли, что сложность задачи заключается в том, что в поле BIRTHDATE лежит дата рождения сотрудника и у каждого сотрудника СВОЙ ГОД РОЖДЕНИЯ. Например, Иванов И.И. родился 09.12.1981 и если запускать запрос сейчас, то он должен быть отобран.
Решение вида:
select *
from Persons
where BIRTHDATE between CURRENT_DATE and (CURRENT_DATE + INTERVAL '15 day')
не подойдёт, так как BIRTHDATE не в диапазоне
CURRENT_DATE and (CURRENT_DATE + INTERVAL '15 day')
09.12.1981 не в диапазоне
06.12.2023 - 21.12.2023
Обратите внимание на года!
Нужно выбирать записи из таблицы без учёта года.
Решения Александра и Полины будут работать правильно!
Ещё одним решением задачи может быть следующий алгоритм: выбираем сотрудников, возраст которых (количество полных лет) сейчас отличается от возраста, который будет через 15 дней. Это означает, что за этот промежуток у сотрудника будет день рождения! Вычислить возраст (количество полных лет) можно разными способами. Вот пример:
SELECT *
FROM PERSONS
WHERE TRUNC(MONTHS_BETWEEN(SYSDATE, BIRTHDATE)/12) <>
TRUNC(MONTHS_BETWEEN(SYSDATE + 15, BIRTHDATE)/12)
Решение вида:
select *
from Persons
where BIRTHDATE between CURRENT_DATE and (CURRENT_DATE + INTERVAL '15 day')
не подойдёт, так как BIRTHDATE не в диапазоне
CURRENT_DATE and (CURRENT_DATE + INTERVAL '15 day')
09.12.1981 не в диапазоне
06.12.2023 - 21.12.2023
Обратите внимание на года!
Нужно выбирать записи из таблицы без учёта года.
Решения Александра и Полины будут работать правильно!
Ещё одним решением задачи может быть следующий алгоритм: выбираем сотрудников, возраст которых (количество полных лет) сейчас отличается от возраста, который будет через 15 дней. Это означает, что за этот промежуток у сотрудника будет день рождения! Вычислить возраст (количество полных лет) можно разными способами. Вот пример:
SELECT *
FROM PERSONS
WHERE TRUNC(MONTHS_BETWEEN(SYSDATE, BIRTHDATE)/12) <>
TRUNC(MONTHS_BETWEEN(SYSDATE + 15, BIRTHDATE)/12)
👍9
Доброе утро, друзья!
Сегодня предлагаю решить необычную задачу с собеседования.
Каким SQL запросом/командой можно посчитать сколько раз в заданном тексте встречается конкретный символ, например точка?
Решение напишу, как всегда, попозже🙂
Сегодня предлагаю решить необычную задачу с собеседования.
Каким SQL запросом/командой можно посчитать сколько раз в заданном тексте встречается конкретный символ, например точка?
Решение напишу, как всегда, попозже🙂
Отличная работа! Почти все решения верные (+ одно ещё на проверке).
Спасибо Вам за активное участие в решении задачи.
Приглашаю посмотреть варианты её решения (кому далось не легко):
https://youtu.be/lYXRDsi0szU
Спасибо Вам за активное участие в решении задачи.
Приглашаю посмотреть варианты её решения (кому далось не легко):
https://youtu.be/lYXRDsi0szU
YouTube
Решение задач по SQL. Собеседование. Таблица DUAL, CONNECT BY LEVEL, Текстовые функции
В этом уроке приведена интересная задача по SQL: Как с помощью SELECT-а получить количество искомой буквы в заданном фрагменте текста. Разбираем методы решения. Стандартные и нестандартные методы.
Пример нестандартного использования CONNECT BY LEVEL.
Тестовые…
Пример нестандартного использования CONNECT BY LEVEL.
Тестовые…
👍7
В базе данных есть таблица CLIENTS, имеющая, среди прочих, столбец CLIENT_TYPE. Все строки таблицы имеют значение CLIENT_TYPE равное 1.
Запрос SELECT MAX(CLIENT_TYPE) FROM CLIENTS WHERE CLIENT_TYPE <> 1 вернёт значение:
Запрос SELECT MAX(CLIENT_TYPE) FROM CLIENTS WHERE CLIENT_TYPE <> 1 вернёт значение:
Anonymous Quiz
54%
null
22%
0
13%
1
1%
2
10%
будет ошибка выполнения SQL-запроса
❤🔥6🔥2
Начните утро понедельника с небольшой задачки по SQL! Найдите лишнее:
Anonymous Quiz
16%
NULLIF(5, 4)
22%
COALESCE(NULL, 5, NULL)
7%
ABS(-5) * 1
56%
-1 * ABS(5)
Каких только задачи не встретишь на собеседовании по SQL. Вот пример ещё одной задачи (немного изменённая, но я сохранил смысл):
Есть всё та же таблица CLIENTS, имеющая, среди прочих, столбец CLIENT_TYPE. В таблице 4 строки. CLIENT_TYPE в первых двух из них имеет значение 1, в третьей и четвёртой строке в CLIENT_TYPE содержится значение 2.
Есть всё та же таблица CLIENTS, имеющая, среди прочих, столбец CLIENT_TYPE. В таблице 4 строки. CLIENT_TYPE в первых двух из них имеет значение 1, в третьей и четвёртой строке в CLIENT_TYPE содержится значение 2.
Сколько строк вернёт следующий запрос?
SELECT COUNT(DISTINCT CLIENT_TYPE) FROM CLIENTS
SELECT COUNT(DISTINCT CLIENT_TYPE) FROM CLIENTS
Anonymous Quiz
20%
1
73%
2
2%
3
5%
4
Специальная задачка для ораклистов! 😌
Какое значение вернёт следующий запрос: SELECT DECODE(5, -5, 5, -5) FROM DUAL
Какое значение вернёт следующий запрос: SELECT DECODE(5, -5, 5, -5) FROM DUAL
Anonymous Quiz
13%
5
54%
-5
33%
NULL
Одна неделя осталась до Нового года! 🎉🎄
Давайте встретим его с мощными знаниями по SQL! 🥇
Курс "SQL. Базы данных. ORACLE. MS SQL Server. MySql" всего за 3.900
Записаться можно тут:
https://prime-soft.biz/courses/sql
Предложение действительно до 15го января!
💻
Давайте встретим его с мощными знаниями по SQL! 🥇
Курс "SQL. Базы данных. ORACLE. MS SQL Server. MySql" всего за 3.900
Записаться можно тут:
https://prime-soft.biz/courses/sql
Предложение действительно до 15го января!
💻
prime-soft.biz
Prime | SQL. Базы данных. ORACLE, MS SQL Server, MySQL
Уроки и курсы SQL, ORACLE, MS SQL Server, MySQL, Базы данных. Практические файлы и материал.
Предлагаю решить очередную небольшую задачу по SQL 🙂💪
Есть таблица CLIENTS (клиенты), имеющая, среди прочих, столбцы:
ID_CLIENT NUMBER PRIMARY KEY,
NAME_CLIENT VARCHAR(100) NOT NULL
И есть таблица INVOICES (счета клиентам) со столбцами:
ID_INVOICE NUMBER PRIMARY KEY,
ID_CLIENT NUMBER NOT NULL,
AMOUNT NUMBER NOT NULL
В таблице INVOICES столбец ID_CLIENT определён как внешний ключ (FOREIGN KEY), ссылающийся на таблицу CLIENTS на поле ID_CLIENT.
Задача вывести все столбцы из таблицы клиентов, а также дополнительными столбцами вывести "количество продаж для каждого клиента" и "ранг клиента". Чем больше счетов выставлено клиенту, тем выше его ранг, такие клиенты должны быть выведены первыми в отчёте.
Попробуйте решить задачу сначала самостоятельно. Попозже напишу решение этой задачи! 🙂👌
Есть таблица CLIENTS (клиенты), имеющая, среди прочих, столбцы:
ID_CLIENT NUMBER PRIMARY KEY,
NAME_CLIENT VARCHAR(100) NOT NULL
И есть таблица INVOICES (счета клиентам) со столбцами:
ID_INVOICE NUMBER PRIMARY KEY,
ID_CLIENT NUMBER NOT NULL,
AMOUNT NUMBER NOT NULL
В таблице INVOICES столбец ID_CLIENT определён как внешний ключ (FOREIGN KEY), ссылающийся на таблицу CLIENTS на поле ID_CLIENT.
Задача вывести все столбцы из таблицы клиентов, а также дополнительными столбцами вывести "количество продаж для каждого клиента" и "ранг клиента". Чем больше счетов выставлено клиенту, тем выше его ранг, такие клиенты должны быть выведены первыми в отчёте.
Попробуйте решить задачу сначала самостоятельно. Попозже напишу решение этой задачи! 🙂👌
Напоминаю, что ещё открыта запись на интенсив Разработки в MySql со мной, который стартует 8 января 2024.
Следующий поток планируется в марте.
Сейчас записаться на курс и оплатить его можно с хорошей скидкой:
https://prime-soft.biz/courses/mysql
ЧЕМУ МЫ НАУЧИМСЯ
- разрабатывать высоконагруженные базы данных (Database design);
- программировать на языке SQL/PSM (внутреннем языке программирования MySQL, который аналогичен языку T-SQL в MS SQL Server и PL/SQL в ORACLE);
- создавать хранимые процедуры, функции, триггеры;
- использовать преимущества MyISAM и InnoDB таблицы для решения разных задач;
- выявлять ошибки в коде и бизнес-логике. Использовать для этого стандартные средства СУБД MySQL, которые она поставляет. Начиная от версии 5 и до 8ой;
- выявлять проблемные и долговыполняющиеся SQL-запросы и оптимизировать их;
- пользоваться транзакциями правильно, как это делают в больших софтверных компаниях;
- бороться с взаимными блокировками (DeadLocks);
- пользоваться вычислениями в запросах (аналоги аналитических / оконных функций);
- конфигурировать MySql, правильно выставлять параметры, обеспечивая максимальную производительность.
КАКИЕ НУЖНЫ ПРЕДВАРИТЕЛЬНЫЕ ЗНАНИЯ
- разумеется базовые навыки SQL (умение писать запросы, пользоваться командами SELECT, INSERT, UPDATE и DELETE);
- желательно понимать что такое индексы и как ими пользоваться;
- навыки создания таблиц.
Идеальная подготовка - наш базовый курс SQL. Базы данных. ORACLE. MS SQL Server. MySQL
ФОРМАТ КУРСА
- 12 он-лайн занятий (вебинары) три раза в неделю (пн, чт в 19:30 и сб в 9:30) по 1.5 часа;
- вебинары будут доступны в записи участникам курса;
- самостоятельные практические задачи (д/з) с совместной проверкой и разбором работ;
- закрытая группа в Телеграмм.
Записаться можно тут
https://prime-soft.biz/courses/mysql
Следующий поток планируется в марте.
Сейчас записаться на курс и оплатить его можно с хорошей скидкой:
https://prime-soft.biz/courses/mysql
ЧЕМУ МЫ НАУЧИМСЯ
- разрабатывать высоконагруженные базы данных (Database design);
- программировать на языке SQL/PSM (внутреннем языке программирования MySQL, который аналогичен языку T-SQL в MS SQL Server и PL/SQL в ORACLE);
- создавать хранимые процедуры, функции, триггеры;
- использовать преимущества MyISAM и InnoDB таблицы для решения разных задач;
- выявлять ошибки в коде и бизнес-логике. Использовать для этого стандартные средства СУБД MySQL, которые она поставляет. Начиная от версии 5 и до 8ой;
- выявлять проблемные и долговыполняющиеся SQL-запросы и оптимизировать их;
- пользоваться транзакциями правильно, как это делают в больших софтверных компаниях;
- бороться с взаимными блокировками (DeadLocks);
- пользоваться вычислениями в запросах (аналоги аналитических / оконных функций);
- конфигурировать MySql, правильно выставлять параметры, обеспечивая максимальную производительность.
КАКИЕ НУЖНЫ ПРЕДВАРИТЕЛЬНЫЕ ЗНАНИЯ
- разумеется базовые навыки SQL (умение писать запросы, пользоваться командами SELECT, INSERT, UPDATE и DELETE);
- желательно понимать что такое индексы и как ими пользоваться;
- навыки создания таблиц.
Идеальная подготовка - наш базовый курс SQL. Базы данных. ORACLE. MS SQL Server. MySQL
ФОРМАТ КУРСА
- 12 он-лайн занятий (вебинары) три раза в неделю (пн, чт в 19:30 и сб в 9:30) по 1.5 часа;
- вебинары будут доступны в записи участникам курса;
- самостоятельные практические задачи (д/з) с совместной проверкой и разбором работ;
- закрытая группа в Телеграмм.
Записаться можно тут
https://prime-soft.biz/courses/mysql
prime-soft.biz
Prime | Обучение программированию в MySQL (SQL/PSM)
Уроки и курсы SQL, MySQL, Базы данных, Программирование с практическими файлами и материалом.
Пишем на SQL
Предлагаю решить очередную небольшую задачу по SQL 🙂💪 Есть таблица CLIENTS (клиенты), имеющая, среди прочих, столбцы: ID_CLIENT NUMBER PRIMARY KEY, NAME_CLIENT VARCHAR(100) NOT NULL И есть таблица INVOICES (счета клиентам) со столбцами: ID_INVOICE …
Здравствуйте, друзья!
Судя по тому, что от Вас сейчас приходят много решений самостоятельных работ наших курсов - все учатся в "ударном" темпе!!! 🙂💪
Хорошее завершение года! С новыми знаниями и умениями в Новый год!
🎉🎄
Посмотреть решение задачи по SQL, которую я публиковал ранее, можно здесь: https://dzen.ru/a/ZY4E7yoEzhEl_zZu
Я уверен, что Вы итак с ней справились 🙂💪 Можно просто сверить решение.
Судя по тому, что от Вас сейчас приходят много решений самостоятельных работ наших курсов - все учатся в "ударном" темпе!!! 🙂💪
Хорошее завершение года! С новыми знаниями и умениями в Новый год!
🎉🎄
Посмотреть решение задачи по SQL, которую я публиковал ранее, можно здесь: https://dzen.ru/a/ZY4E7yoEzhEl_zZu
Я уверен, что Вы итак с ней справились 🙂💪 Можно просто сверить решение.
Дзен | Статьи
Небольшая SQL задача с подзапросом и аналитикой
Статья автора «Илья Хохлов» в Дзене ✍: По условиям задачи, нам даны две таблицы: таблица CLIENTS (клиенты), имеющая, среди прочих, столбцы:
ID_CLIENT NUMBER PRIMARY KEY,
NAME_CLIENT VARCHAR(100)
ID_CLIENT NUMBER PRIMARY KEY,
NAME_CLIENT VARCHAR(100)
👍4
Друзья, всех с наступающим новым годом!
От нас Вам самые добрые пожелания: успехов в профессиональной и личной сфере, новых горизонтов и внутренней гармонии!
Как мы работаем на праздниках:
1 - 3 января у нас выходной. Затем мы проверяем работы и отвечаем в режиме выходных и праздничных дней, то есть два раза в день (утром и вечером).
Спасибо Вам:
Помните, год назад, также, под новый год, я загадал, что к следующему новому году получится набрать 1.000 подписчиков на канале! Благодаря Вам отчасти это получилось! Сейчас нас 700! Конечно, до 1.000 далеко, но ведь за год пришло 500 и это не мало!
На этот раз не буду загадывать:)
Буду стараться, как и сейчас, публиковать интересные задачи с реальной практики и с собеседований по SQL! Спасибо, что присылаете нам примеры и разрешаете их публиковать! Благодаря Вам, все могут попробовать свои силы! И спасибо за активное участие в опросах!
С наступающим! 🥂
От нас Вам самые добрые пожелания: успехов в профессиональной и личной сфере, новых горизонтов и внутренней гармонии!
Как мы работаем на праздниках:
1 - 3 января у нас выходной. Затем мы проверяем работы и отвечаем в режиме выходных и праздничных дней, то есть два раза в день (утром и вечером).
Спасибо Вам:
Помните, год назад, также, под новый год, я загадал, что к следующему новому году получится набрать 1.000 подписчиков на канале! Благодаря Вам отчасти это получилось! Сейчас нас 700! Конечно, до 1.000 далеко, но ведь за год пришло 500 и это не мало!
На этот раз не буду загадывать:)
Буду стараться, как и сейчас, публиковать интересные задачи с реальной практики и с собеседований по SQL! Спасибо, что присылаете нам примеры и разрешаете их публиковать! Благодаря Вам, все могут попробовать свои силы! И спасибо за активное участие в опросах!
С наступающим! 🥂
🎉16🔥3🎄1
С наступившим Новым годом, друзья!
И вот первая SQL задача этого года!
В таблице CLIENTS пять строк. В первых двух строках в поле CLIENT_TYPE значение 1, ещё в двух строках в CLIENT_TYPE значение 2 и в последней строке поле CLIENT_TYPE не заполнено, то есть в последней строке в поле CLIENT_TYPE значение NULL.
И вот первая SQL задача этого года!
В таблице CLIENTS пять строк. В первых двух строках в поле CLIENT_TYPE значение 1, ещё в двух строках в CLIENT_TYPE значение 2 и в последней строке поле CLIENT_TYPE не заполнено, то есть в последней строке в поле CLIENT_TYPE значение NULL.
Какое значение вернёт следующий запрос:
SELECT COUNT(DISTINCT CLIENT_TYPE) FROM CLIENTS
SELECT COUNT(DISTINCT CLIENT_TYPE) FROM CLIENTS
Anonymous Quiz
5%
1
40%
2
28%
3
5%
4
6%
5
8%
NULL
8%
Запрос "взорвётся" на ошибке, как фейерверк на новый год
👍2
Всем отличного начала нового года! Предлагаю решить похожую на предыдущую SQL-задачу, но в этот раз будет посложнее!
В таблице 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)
В таблице 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)
👍1