SQL марафон из 5 задач с призом 🏆
Друзья, всем привет!
Решил попробовать новый формат. Это будут задачи для начинающих. Однако, мидлам и сеньерам тоже будет полезно размять мозг 🧠
Примерно такого уровня вопросы, мне попадались на собеседованиях на Java-разработчика.
Особенность - ответы будут сразу публиковаться с задачкой, но в скрытом режиме. Всего будет 5 постов-задач, с интервалом в 1.5 часа.
🔹Рекомендую, перед открытием спойлера, посидеть и подумать 😉
🔹Синтаксис, естественно, для Oracle.
🔹Я привожу не все возможные решения 👌
🔹Оставляем "за бортом" вопросы оптимизации.
🔹Определения для таблиц можно взять с репозитория
🔹Телега не позволяет использовать спойлер и SQL-форматирование одновременно😔
⚠️ Для интереса. Автору, опубликовавшему max количество оригинальных решений суммарно на все задачки в чатике, будет вручен денежный призмиллион - 5000 рублей или эквивалент USDT 💸💸 Добавляйте в ответ #решение_n.
Первая задача в 11:00 МСК ⏰
#задача #sql #марафон
Oracle Developer | Чат 💬
Друзья, всем привет!
Решил попробовать новый формат. Это будут задачи для начинающих. Однако, мидлам и сеньерам тоже будет полезно размять мозг 🧠
Примерно такого уровня вопросы, мне попадались на собеседованиях на Java-разработчика.
Особенность - ответы будут сразу публиковаться с задачкой, но в скрытом режиме. Всего будет 5 постов-задач, с интервалом в 1.5 часа.
🔹Рекомендую, перед открытием спойлера, посидеть и подумать 😉
🔹Синтаксис, естественно, для Oracle.
🔹Я привожу не все возможные решения 👌
🔹Оставляем "за бортом" вопросы оптимизации.
🔹Определения для таблиц можно взять с репозитория
🔹Телега не позволяет использовать спойлер и SQL-форматирование одновременно😔
⚠️ Для интереса. Автору, опубликовавшему max количество оригинальных решений суммарно на все задачки в чатике, будет вручен денежный приз
Первая задача в 11:00 МСК ⏰
#задача #sql #марафон
Oracle Developer | Чат 💬
SQL марафон. Задача 1.
Постановка
Необходимо найти вторую по величине зарплату сотрудников (salary).
Сотрудники - таблица employees.
Решения
1️⃣
select max(salary)
from employees
where salary not in (select max(salary) from employees);
2️⃣
select max(salary) as secondhighestsalary
from employees
where salary < (select max(salary) from employees);
3️⃣
select salary
from (select salary
,row_number() over(order by salary desc) as rnk
from employees)
where rnk = 2;
Опубликуйте свое решение в чатике с тегом #решение1 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Постановка
Необходимо найти вторую по величине зарплату сотрудников (salary).
Сотрудники - таблица employees.
Решения
1️⃣
from employees
where salary not in (select max(salary) from employees);
select max(salary) as secondhighestsalary
from employees
where salary < (select max(salary) from employees);
from (select salary
,row_number() over(order by salary desc) as rnk
from employees)
where rnk = 2;
Опубликуйте свое решение в чатике с тегом #решение1 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
SQL марафон. Задача 2.
Постановка
Найдите максимальную зарплату для каждого департамента.
Выведете - имя департамента (department_name) и максимальную зарплату для него (salary).
Если у департамента нет сотрудников - максимальная зарплата должна быть "0".
Отсортируйте по имени департамента.
Департаменты - таблица departments.
Сотрудники - таблица employees.
Решения
1️⃣
select d.department_name
,nvl(max(salary), 0)
from departments d
left join employees e on e.department_id = d.department_id
group by department_name
order by department_name;
2️⃣
select d.department_name,
nvl((select max(salary)
from employees e
where e.department_id = d.department_id), 0) as max_salary
from departments d
order by d.department_name;
Опубликуйте свое решение в чатике с тегом #решение2 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Постановка
Найдите максимальную зарплату для каждого департамента.
Выведете - имя департамента (department_name) и максимальную зарплату для него (salary).
Если у департамента нет сотрудников - максимальная зарплата должна быть "0".
Отсортируйте по имени департамента.
Департаменты - таблица departments.
Сотрудники - таблица employees.
Решения
1️⃣
,nvl(max(salary), 0)
from departments d
left join employees e on e.department_id = d.department_id
group by department_name
order by department_name;
2️⃣
nvl((select max(salary)
from employees e
where e.department_id = d.department_id), 0) as max_salary
from departments d
order by d.department_name;
Опубликуйте свое решение в чатике с тегом #решение2 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
SQL марафон. Задача 3.
Постановка
Нужно найти сотрудников, которые работают дольше всех в своей должности (job_id).
Выведите все поля из таблицы employees.
Сотрудники - таблица employees.
Решения
1️⃣
select e.*
from employees e
where hire_date =
(select min(hire_date) from employees where job_id = e.job_id);
2️⃣
select e.*
from employees e
join (select job_id
,min(hire_date) min_hire_date
from employees
group by job_id) m
on e.job_id = m.job_id
and e.hire_date = m.min_hire_date;
Опубликуйте свое решение в чатике с тегом #решение3 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Постановка
Нужно найти сотрудников, которые работают дольше всех в своей должности (job_id).
Выведите все поля из таблицы employees.
Сотрудники - таблица employees.
Решения
1️⃣
from employees e
where hire_date =
(select min(hire_date) from employees where job_id = e.job_id);
2️⃣
from employees e
join (select job_id
,min(hire_date) min_hire_date
from employees
group by job_id) m
on e.job_id = m.job_id
and e.hire_date = m.min_hire_date;
Опубликуйте свое решение в чатике с тегом #решение3 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
SQL марафон. Задача 4.
Постановка
Нужно найти отделы с общей зарплатой сотрудников более 50000.
Вывести - ID отдела (department_id).
Сотрудники - таблица employees.
Решения
1️⃣
select department_id
from employees
group by department_id
having sum(salary) > 50000;
2️⃣
select d.department_id
from departments d
where (select sum(salary)
from employees e
where e.department_id = d.department_id) > 50000;
3️⃣
with dept_salaries as
(select department_id
,sum(salary) as total_salary
from employees
group by department_id)
select department_id
from dept_salaries
where total_salary > 50000;
Опубликуйте свое решение в чатике с тегом #решение4 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Постановка
Нужно найти отделы с общей зарплатой сотрудников более 50000.
Вывести - ID отдела (department_id).
Сотрудники - таблица employees.
Решения
1️⃣
from employees
group by department_id
having sum(salary) > 50000;
2️⃣
from departments d
where (select sum(salary)
from employees e
where e.department_id = d.department_id) > 50000;
3️⃣
(select department_id
,sum(salary) as total_salary
from employees
group by department_id)
select department_id
from dept_salaries
where total_salary > 50000;
Опубликуйте свое решение в чатике с тегом #решение4 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
SQL марафон. Задача 5.
Постановка
Нужно найти всех сотрудников, у которых зарплата выше средней зарплаты в таблице employees.
Вывести - все столбцы из таблицы employees.
Сотрудники - таблица employees.
Решения
1️⃣
select e.*
from employees e
where e.salary > (select sum(salary) / count(*) from employees);
2️⃣
with avg_sal as
(select avg(salary) as avg_salary from employees)
select e.*
from avg_sal a
join employees e on e.salary > a.avg_salary;
Опубликуйте свое решение в чатике с тегом #решение5 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
Постановка
Нужно найти всех сотрудников, у которых зарплата выше средней зарплаты в таблице employees.
Вывести - все столбцы из таблицы employees.
Сотрудники - таблица employees.
Решения
1️⃣
from employees e
where e.salary > (select sum(salary) / count(*) from employees);
2️⃣
(select avg(salary) as avg_salary from employees)
select e.*
from avg_sal a
join employees e on e.salary > a.avg_salary;
Опубликуйте свое решение в чатике с тегом #решение5 💬
#задача #sql #марафон
Канал Oracle Developer | Чатик 💬
🌐 Навигация по темам канала Oracle Developer
📘 Основы
#sql #plsql #теория #архитектура
#функции #секционирование #временныетаблицы
#транзакции #исключения #курсоры
#аналитическиефункции #иерархическиезапросы
#системныепредставления #компиляция #представления #коллекции #циклы
🛠 Практика и задачи
#задача #решениезадачи #asktom
🚀 Оптимизация и производительность
#оптимизация #nestedloops #индекс
🧩 Инструменты и технологии
#тестирование #postgresql #oracle #docker #oracle23c #ide #ai
💼 Карьера и Развитие
#карьера #собеседование #hr #тинькофф #magnit #вкусноиточка #leroymerlin #сбер #яндекс #Эффективность #КарьерныйРост #Denis_Kivillev #Работа
🎓 Дополнительные материалы
#видео #подкаст #аудиоподкаст #конкурс #марафон #юмор
—
В почти 700 (!) постах не мудрено заплутать. Поэтому решил сделать подобие навигации 😉
Не забывайте пользоваться обычным поиском, я не добавил сюда низкочастотные хештеги.
Канал Oracle Developer | Чатик💬
📘 Основы
#sql #plsql #теория #архитектура
#функции #секционирование #временныетаблицы
#транзакции #исключения #курсоры
#аналитическиефункции #иерархическиезапросы
#системныепредставления #компиляция #представления #коллекции #циклы
🛠 Практика и задачи
#задача #решениезадачи #asktom
🚀 Оптимизация и производительность
#оптимизация #nestedloops #индекс
🧩 Инструменты и технологии
#тестирование #postgresql #oracle #docker #oracle23c #ide #ai
💼 Карьера и Развитие
#карьера #собеседование #hr #тинькофф #magnit #вкусноиточка #leroymerlin #сбер #яндекс #Эффективность #КарьерныйРост #Denis_Kivillev #Работа
🎓 Дополнительные материалы
#видео #подкаст #аудиоподкаст #конкурс #марафон #юмор
—
В почти 700 (!) постах не мудрено заплутать. Поэтому решил сделать подобие навигации 😉
Не забывайте пользоваться обычным поиском, я не добавил сюда низкочастотные хештеги.
Канал Oracle Developer | Чатик💬
Решение задачи с Java-собеседования
1️⃣ Запрос для получения всех сотрудников вместе с их зарплатными начислениями
Здесь мы используем левое соединение (LEFT JOIN), чтобы отобразить всех сотрудников, даже если у них пока нет выплат.
Что делает запрос:
🔹left join гарантирует, что каждый сотрудник из таблицы Persons будет отображен.
🔹поле amount будет NULL, если у сотрудника нет выплат.
2️⃣ Запрос для получения сотрудников, у которых общий размер выплат превышает 25
Здесь мы используем группировку (GROUP BY) и фильтрацию по агрегированной сумме (HAVING).
Что делает запрос:
🔹SUM(pay.amount) рассчитывает общий размер начислений для каждого сотрудника;
🔹HAVING фильтрует только тех сотрудников, у которых сумма начислений превышает 25;
🔹группировка производится по id и name, чтобы для каждого сотрудника была одна строка;
🔹также используется left join, чтобы учесть новых сотрудников, у которых еще нет выплат (их сумма будет NULL, что при суммировании интерпретируется как 0).
—
Вероятно, джависта можно испугать такой задачкой, но нам Оракл-разработчикам - смешно😁
Зато алгоритмическая секция, может попортить кровушки 🩸
Обсудить в чате 💬
#sql #собеседование #решениезадачи
Канал Oracle Developer| Чат 💬
1️⃣ Запрос для получения всех сотрудников вместе с их зарплатными начислениями
Здесь мы используем левое соединение (LEFT JOIN), чтобы отобразить всех сотрудников, даже если у них пока нет выплат.
select p.id person_id
,p.name
,pay.amount
from persons p
left join payments pay
on p.id = pay.person_id;
Что делает запрос:
🔹left join гарантирует, что каждый сотрудник из таблицы Persons будет отображен.
🔹поле amount будет NULL, если у сотрудника нет выплат.
2️⃣ Запрос для получения сотрудников, у которых общий размер выплат превышает 25
Здесь мы используем группировку (GROUP BY) и фильтрацию по агрегированной сумме (HAVING).
select p.id person_id
,p.name
,sum(pay.amount) total_amount
from persons p
left join payments pay
on p.id = pay.person_id
group by p.id, p.name
having sum(pay.amount) > 25;
Что делает запрос:
🔹SUM(pay.amount) рассчитывает общий размер начислений для каждого сотрудника;
🔹HAVING фильтрует только тех сотрудников, у которых сумма начислений превышает 25;
🔹группировка производится по id и name, чтобы для каждого сотрудника была одна строка;
🔹также используется left join, чтобы учесть новых сотрудников, у которых еще нет выплат (их сумма будет NULL, что при суммировании интерпретируется как 0).
—
Вероятно, джависта можно испугать такой задачкой, но нам Оракл-разработчикам - смешно😁
Зато алгоритмическая секция, может попортить кровушки 🩸
Обсудить в чате 💬
#sql #собеседование #решениезадачи
Канал Oracle Developer| Чат 💬
📊 Как узнать количество строк в каждой таблице с помощью одного SQL-запроса?
Друзья, всем привет! 👋
Хотите быстро узнать количество строк во всех таблицах базы данных, но без ресурсоемкого SELECT COUNT(*) для каждой? Ловите лайфхак! ⚡️
🔎 Как это сделать?
Oracle хранит статистику о таблицах в системных представлениях USER_TABLES и ALL_TABLES. В поле NUM_ROWS содержится количество строк, зафиксированное при последнем сборе статистики.
📌 Запрос для получения данных
Этот SQL выдаст список таблиц и количество строк в них на момент последнего обновления статистики.
💡 Важно! Данные могут быть устаревшими. Чтобы освежить статистику, используйте:
Это особенно полезно в больших БД, где полный пересчет строк мог бы занять очень много времени.
🚀 Итог
Использование системных представлений + регулярное обновление статистики = быстрый и эффективный анализ структуры базы без лишних нагрузок.
А вы как решаете эту задачу? Делитесь в комментариях! 💬
#SQL #Oracle #оптимизация
Канал Oracle Developer | Чатик 💬
Друзья, всем привет! 👋
Хотите быстро узнать количество строк во всех таблицах базы данных, но без ресурсоемкого SELECT COUNT(*) для каждой? Ловите лайфхак! ⚡️
🔎 Как это сделать?
Oracle хранит статистику о таблицах в системных представлениях USER_TABLES и ALL_TABLES. В поле NUM_ROWS содержится количество строк, зафиксированное при последнем сборе статистики.
📌 Запрос для получения данных
SELECT table_name, num_rows
FROM user_tables;
Этот SQL выдаст список таблиц и количество строк в них на момент последнего обновления статистики.
💡 Важно! Данные могут быть устаревшими. Чтобы освежить статистику, используйте:
call DBMS_STATS.GATHER_SCHEMA_STATS(ownname => 'СХЕМА');
Это особенно полезно в больших БД, где полный пересчет строк мог бы занять очень много времени.
🚀 Итог
Использование системных представлений + регулярное обновление статистики = быстрый и эффективный анализ структуры базы без лишних нагрузок.
А вы как решаете эту задачу? Делитесь в комментариях! 💬
#SQL #Oracle #оптимизация
Канал Oracle Developer | Чатик 💬
Друзья, всем привет! 👋
Сегодня немного разбавим разговоры про карьеру задачкой из реального тестового задания на позицию разработчика 🚀
Итак, имеем две таблицы
Изначально в таблице test содержится 23 записи со значениями
В таблице test_log имеется запись со значением
💼 Задача:
Написать цикл от 1 до 23 (номер шага цикла обозначим как i), который:
1️⃣ Обновляет данные в таблице test для каждой записи
2️⃣ Вставляет в таблицу test_log запись с
💡 Условия:
✔️ Каждые 5 шагов необходимо выполнять фиксацию изменений в таблицах.
✔️ Если на каком-либо шаге произошла ошибка, изменения не должны быть зафиксированы.🚀
Лучшее решение обязательно опубликуем в понедельник 📝
Кто справился быстро — перешлите задачку коллеге, интересно узнать, как быстро справится он 😉
Обсудить в нашем чатике 💬
#задача #sql #практика #Pavel_Dolganov
Канал Oracle Developer | Чатик 💬
Сегодня немного разбавим разговоры про карьеру задачкой из реального тестового задания на позицию разработчика 🚀
Итак, имеем две таблицы
test
и test_log
:create table test(
n number
);
create table test_log(
n number
);
Изначально в таблице test содержится 23 записи со значениями
n
от 1 до 23.В таблице test_log имеется запись со значением
n
, равным 8. 💼 Задача:
Написать цикл от 1 до 23 (номер шага цикла обозначим как i), который:
1️⃣ Обновляет данные в таблице test для каждой записи
n = i,
устанавливая n = n - 1.
2️⃣ Вставляет в таблицу test_log запись с
n = i.
💡 Условия:
✔️ Каждые 5 шагов необходимо выполнять фиксацию изменений в таблицах.
✔️ Если на каком-либо шаге произошла ошибка, изменения не должны быть зафиксированы.🚀
Лучшее решение обязательно опубликуем в понедельник 📝
Кто справился быстро — перешлите задачку коллеге, интересно узнать, как быстро справится он 😉
Обсудить в нашем чатике 💬
#задача #sql #практика #Pavel_Dolganov
Канал Oracle Developer | Чатик 💬