Решение 1-й задачки без подзапросов: SELECT student_id, sum(case when mark = 5 then 1 end) as count_of_5ths FROM register GROUP BY student_id HAVING sum(case when mark = 3 then 1 end) < 10;
как же else? Select student_id, sum(case when mark = 5 then 1 else 0 end) as cnt_5 From register Group by student_id Having sum(case when mark = 3 then 1 else 0 end) < 10
-- задача 3-- выдать количество дней в июне 2021 года, когда букингов более 10. create table bookings ( booking_id int, start_date date, end_date date);
Спасибо, очень интересное видео, очень интересные вопросы. Но не понравились ответы соискателя, даже скорее с точки зрения софтскиллов. Могу сказать, что за опыт моих десятков собеседований мои интервьюеры ни разу меня так не поддерживали.
Ну в лоб решение было такое ( пишу не в иде, могут быть синтаксические ошибки) select student_id, count(mark) filter(where mark = 5) from register group by student_id having count(mark) filter(where mark = 3) > 10
То, что человек, называющий себя тимлидом и согласившийся на интервью по БД, "вспоминает как устроен where" - это, конечно, удивительно. Но гораздо более удивительно другое - зачем эти муки загружать на ютуб??? Самое бесполезное видео из всего, что я когда-либо видел. Даже ржаки из тик-тока больше пользы несут - они хотя бы развлекают
select t.stud_id ,count(case when t.mark = 5 then 1 end) as cnt5 from register_t t where (t.mark = 3 or t.mark = 5) group by t.stud_id having count(case when t.mark = 3 then 1 end) < 10;
Жесть какая-то. Авторам канала совет, делайте хотя бы первичный скрининг потому что кандидат даже на позицию джуна не тянет. Я бы на пушечный выстрел к такому тимлиду не подошел )
Да это просто кто-то из зрителей кто согласился поучаствовать, он даже запрос по строкам не переносит - скорее всего он очень начинающий либо из другой сферы (например фронтендер ).
select id, scor_5_count FROM ( select id, count(scor_3) scor_3_count, count(scor_5) scor_5_count FROM ( select id, iif(marc=3,1,null) scor_3, iif(marc=5,1,null) scor_5 from t ) t1 group by id ) t2 where scor_3
Основной скилл тимлида - это довести вверенную ему часть проекта до успешного завершения, а не помнить как пользоваться SQL. Хороший тимлид делегирует такие задачи сеньору, а тот спустит их жун, затем жун вернёт, а сеньор проверит и скажет тимлиду что все ок.
Какие-то понты в комментах. "Даже на джуна не тянет". Мои знакомые синиоры с рейтами вплоть до $200/час эту задачу не решили бы на собеседовании. Вообще, такие задачи нельзя давать на собеседовании. Задача интервьюера проверить опыт, а не трахнуть мозг. От собеседования просто тянет желанием пассивно-агрессивно унизить кандидата.
@@2Balthasar у меня самого рейт на фултайме 50 долларов в час, это с учётом того, что сейчас валютную удалёнку найти невероятно трудно. До СВО рейт был заметно выше. На фрилансе у меня стабильно 150 долларов в час. Речь выше идёт о ребятах намного круче меня, тебе до их уровня чисто статистически не дотянуть никогда. Отдыхай.
Такие вещи нужно делать через разворот, на Oracle вот три варианта: 1. SELECT student_id, cnt5 FROM ( SELECT student_id, sum( cnt3 ) cnt3, sum( cnt5 ) cnt5 FROM ( SELECT m.student_id, m.mark, CASE WHEN m.mark = 3 THEN 1 ELSE 0 END cnt3, CASE WHEN m.mark = 5 THEN 1 ELSE 0 END cnt5 FROM marks m )w GROUP BY student_id )q WHERE cnt3 < 10;
SELECT DISTINCT student_id, cnt5 FROM ( SELECT student_id, sum( cnt3 ) over( PARTITION BY student_id ) cnt3, sum( cnt5 ) over( PARTITION BY student_id ) cnt5 FROM ( SELECT m.student_id, m.mark, CASE WHEN m.mark = 3 THEN 1 ELSE 0 END cnt3, CASE WHEN m.mark = 5 THEN 1 ELSE 0 END cnt5 FROM marks m )w )q WHERE cnt3 < 10; SELECT student_id, "5" FROM ( SELECT student_id, "3", "5" FROM marks PIVOT( COUNT(mark) FOR mark IN ( 3,5 ) )w )q WHERE "3" < 10;
SELECT * FROM ( SELECT student_id, count(case when mark = 3 then 1 end) triplets, count(case when mark = 5 then 1 end) fives FROM register GROUP BY student_id ) tmp WHERE triplets < 10
@@vladimirsrednikh3023 Обрати внимание, что у case нету else - в выдаче будут записи только удовлетворяющие условие. Их то и считаем. Sum тоже можно, но тогда нужна еще ветка else - sum(case when mark = 3 then 1 else 0 end) triplets.
Решение 1-й задачки без подзапросов:
SELECT
student_id,
sum(case when mark = 5 then 1 end) as count_of_5ths
FROM register
GROUP BY student_id
HAVING sum(case when mark = 3 then 1 end) < 10;
Превращать каждый нужный результат в единицу и просуммировать? Нестандартный подход, интересно. Я бы просто воспользовался функцией count
как же else?
Select student_id,
sum(case when mark = 5 then 1 else 0 end) as cnt_5
From register
Group by student_id
Having sum(case when mark = 3 then 1 else 0 end) < 10
@@АлександрПетров-з6р с добавлением "else 0" результат не изменится.
@@АлександрПетров-з6р else необязателен в данном примере, без явного else по дефолту будет null
А если у него вообще нет 3ек ? )))
Выкладывайте удачные собеседования, интереснен же разбор вопросов и решения задач.
59:35 если в конце собеседования вы слышите "... вы большой молодец" - значит вас уже зарубили и пытаются лечить
что значит "зарубили"?
Выложите, пожалуйста, условия остальных задач по SQL. Уже ниже просили это сделать, но просьба почему-то осталась без внимания. 🤷♂
А можно ссылку на файл с остальными задачами? Интересно посмотреть.
-- задача 3-- выдать количество дней в июне 2021 года, когда букингов более 10. create table bookings ( booking_id int, start_date date, end_date date);
Спасибо, очень интересное видео, очень интересные вопросы. Но не понравились ответы соискателя, даже скорее с точки зрения софтскиллов. Могу сказать, что за опыт моих десятков собеседований мои интервьюеры ни разу меня так не поддерживали.
Ну в лоб решение было такое ( пишу не в иде, могут быть синтаксические ошибки)
select
student_id,
count(mark) filter(where mark = 5)
from register
group by student_id
having count(mark) filter(where mark = 3) > 10
Вообще, жанр интересный, но соискатель сильно не в теме...
Видимо пилотная серия
То, что человек, называющий себя тимлидом и согласившийся на интервью по БД, "вспоминает как устроен where" - это, конечно, удивительно. Но гораздо более удивительно другое - зачем эти муки загружать на ютуб??? Самое бесполезное видео из всего, что я когда-либо видел. Даже ржаки из тик-тока больше пользы несут - они хотя бы развлекают
Можно почувствовать свое превосходство. Но к сожалению это наше будущее и не только в IT
select
t.stud_id
,count(case when t.mark = 5 then 1 end) as cnt5
from register_t t
where (t.mark = 3 or t.mark = 5)
group by t.stud_id
having count(case when t.mark = 3 then 1 end) < 10;
Скиньте сюда, пожалуйста, остальные задачки!
Жесть какая-то. Авторам канала совет, делайте хотя бы первичный скрининг потому что кандидат даже на позицию джуна не тянет. Я бы на пушечный выстрел к такому тимлиду не подошел )
Да это просто кто-то из зрителей кто согласился поучаствовать, он даже запрос по строкам не переносит - скорее всего он очень начинающий либо из другой сферы (например фронтендер ).
Секция комментов достойна самого канала
Я бы хотела попробовать тоже так пособеседоваться, интересно бы было потом на себя со стороны посмотреть
то есть это собес на бэкэнд разраба?
Очень полезное видео для тимлидов.
А Павел-Гриша совсем не плох !
начало 8:35
Не хочется быть хейтером, но соискатель слабый. Жене
Хуже всего то, что он пытался сохранить лицо, хотя всем было просто, что это фейл.
Начало собеса с 7:40
Эпический фейл...
select id, scor_5_count
FROM
(
select id, count(scor_3) scor_3_count, count(scor_5) scor_5_count FROM
(
select id, iif(marc=3,1,null) scor_3, iif(marc=5,1,null) scor_5 from t
) t1
group by id
) t2
where scor_3
Ну и тимлид... еще и вызвался проходить собес...
Тимлид, а не техлид ведь xD
А что надо было делать?
Основной скилл тимлида - это довести вверенную ему часть проекта до успешного завершения, а не помнить как пользоваться SQL. Хороший тимлид делегирует такие задачи сеньору, а тот спустит их жун, затем жун вернёт, а сеньор проверит и скажет тимлиду что все ок.
Какие-то понты в комментах. "Даже на джуна не тянет". Мои знакомые синиоры с рейтами вплоть до $200/час эту задачу не решили бы на собеседовании. Вообще, такие задачи нельзя давать на собеседовании. Задача интервьюера проверить опыт, а не трахнуть мозг. От собеседования просто тянет желанием пассивно-агрессивно унизить кандидата.
Единственный адекватный коммент который я прочитал тут
Так, видимо, эти "синиоры" не в IT работают, а предоставляют услуги из другой области )))
@@_v_100 им наплевать на мнение таких как ты. Это профессионалы с рейтом, до которого ты, почти наверняка, никогда не дорастёшь.
Да у меня брат сеньор!!!!11!11
@@2Balthasar у меня самого рейт на фултайме 50 долларов в час, это с учётом того, что сейчас валютную удалёнку найти невероятно трудно. До СВО рейт был заметно выше. На фрилансе у меня стабильно 150 долларов в час.
Речь выше идёт о ребятах намного круче меня, тебе до их уровня чисто статистически не дотянуть никогда.
Отдыхай.
фу, на маке, сразу ясно что дизайнер или продукт, только языком чесать способен
Или фронтендер
СОЕДИНЕНИЕ, прекратите употреблять слово "джойн". ВЫ СОЕДИНЯЕТЕ ТАБЛИЦЫ/множества/подмножества, НИЧЕГО ДРУГОГО НЕ ПРОИСХОДИТ.
Такие вещи нужно делать через разворот, на Oracle вот три варианта:
1. SELECT
student_id,
cnt5
FROM
(
SELECT
student_id,
sum( cnt3 ) cnt3,
sum( cnt5 ) cnt5
FROM
(
SELECT
m.student_id,
m.mark,
CASE WHEN m.mark = 3 THEN 1 ELSE 0 END cnt3,
CASE WHEN m.mark = 5 THEN 1 ELSE 0 END cnt5
FROM marks m
)w
GROUP BY student_id
)q
WHERE cnt3 < 10;
SELECT
DISTINCT
student_id,
cnt5
FROM
(
SELECT
student_id,
sum( cnt3 ) over( PARTITION BY student_id ) cnt3,
sum( cnt5 ) over( PARTITION BY student_id ) cnt5
FROM
(
SELECT
m.student_id,
m.mark,
CASE WHEN m.mark = 3 THEN 1 ELSE 0 END cnt3,
CASE WHEN m.mark = 5 THEN 1 ELSE 0 END cnt5
FROM marks m
)w
)q
WHERE cnt3 < 10;
SELECT student_id, "5"
FROM
(
SELECT student_id, "3", "5" FROM marks
PIVOT(
COUNT(mark)
FOR mark
IN ( 3,5 )
)w
)q
WHERE "3" < 10;
SELECT *
FROM (
SELECT student_id,
count(case when mark = 3 then 1 end) triplets,
count(case when mark = 5 then 1 end) fives
FROM register
GROUP BY student_id
) tmp
WHERE triplets < 10
Там наверно не count нужно а sum
@@vladimirsrednikh3023
Обрати внимание, что у case нету else - в выдаче будут записи только удовлетворяющие условие. Их то и считаем. Sum тоже можно, но тогда нужна еще ветка else - sum(case when mark = 3 then 1 else 0 end) triplets.