Типичные вопросы на собеседовании по SQL и подробные ответы на них. Илья Хохлов. Часть 2 Моя книга самоучитель по SQL: play.google.com/store/books/d... #Уроки_SQL #Вопросы_на_собеседовании_по_SQL #Илья_Хохлов
Спасибо большое за видео. Единственное было сложно смотреть, так как часто уже озвученные мысли неоднократно повторялись. Думаю, если повторы убрать, видео станет короче. Тратить 20 минут на 3 задачи - непозволительная роскошь)) На той же курсере видео в среднем длятся 5 минут, но материал хорошо объясняется. SQL используют аналитики, они должны быстро соображать)) Но за видео спасибо)) Мне был интересен момент с having.
Незаслуженно мало просмотров! Смотрела бы и смотрела целый день, честно :) Очень приятная подача информации: голос, интонация, такое дружелюбие по отношению к зрителю/ученику. За два видео подкорректировала кое-какие знания, а вообще лайк и подписка!
Человек отлично объясняет, всем кому кажется избыточным мб и так, ну поставьте большую скорость. Приятный голос и очень доступно объсняет спасибо большое
Братишка просто пулемёт . Я сам гуру SQL Но ты меня взгрел прослушал на одном дыхании и у меня встал а когда пыль улеглась я кончил . Молоток пулеметная лекция . 👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍👍
Во второй задаче можно просто еще было бы в подзапрос закинуть и использовать как раз date_import Пример: Select * from (select extract(year from sysdate) as year_import from dual) where year_import>2010
Аналогия для тех кто работал со сводными таблицами в эксель. WHERE работает как фильтрация на уровне простой таблицы. GROUP BY своего рода аналог сводной таблицы по функциям SUM, AVG, MIN и т.д. Соответственно фильтрация как бы это было в сводной таблице для сгруппированных диапазонов реализуется через HAVING. (Это аналогия чтобы было проще понять)
Спасибо большое за урок! Хочу немного поспорить с тезисом, что Having не может использоваться без Group by. Насколько я знаю, Having применим к данным, над которыми проведена агрегация, а Group By - лишь один из агрегирующих операторов. Таким образом, Having можно применять сразу к оператору SUM без доп. условия группировки. По крайней мере, в PostgreSQL работает так. Спасибо.
2 задачу можно решить подзапросом: Select t2.id_item, t2.name_item, t2.year_import from (select t1.id_item, t1.name_item, extract(year from t1.date_import) as year_import from table t1) t2 where t2.year_import>2010
HAVING может спокойно применяться без GROUP BY и работать с алиасами полей, другими словами HAVING просто может фильтровать набор который уже отработал запрос
UNION можно объяснить еще и так: если есть запрос к одной таблице с разными условиями, то запрос "SELECT fld1.fld2, fld3 FROM t1 WHERE условие1 UNION SELECT fld1.fld2, fld3 FROM t1 WHERE условие2" эквивалентен "SELECT fld1.fld2, fld3 FROM t1 WHERE условие1 AND условие2" , UNION ALL бы задвоил одинаковые строки из разных условиий
Важное уточнение насчёт Union-ов: Union all не производит сортировку Union же сначала производит сортировку двух таблиц и потом уже соединяет удаляя дубликаты
я правильно понимаю, если я использую только order by, то я могу сортировать значения по столбцам, которые находятся в списке select, а так же по тем, которые не находятся в списке select, но имеются в самой таблице. Однако если в моем запросе перед order by есть еще group by, то я могу сортировать элементы только по тем столбцам, которые есть в списке select и есть в списке group by, yes ??
А как же cross apply? Это же любимое соединение, когда как раз что-то нужно посчитать или вытащить year from date, а потом посчитанное использовать и в where, и в select для оптимизации. DML почему то вспомнил xml dml commands. Там вроде даже циклы можно писать по обходу вершин с постановкой значений колонок
Спасибо за Ваш труд. Подскажите, пожалуйста, в моменте, где объявляем условие HAVING SUM(s.SUM_PAYMENT) > 100000, можно использовать имя, объявленное через алиас (TOTAL_SUM) ? Типа HAVING TOTAL_SUM > 1000000.
Здравствуйте, Станислав! К сожалению нет. Только после того как будет известен весь набор возвращаемых данных (уже после отсеивания HAVING-ом) столбцам будут даны алиасы. Алиасы даются почти в самый последний момент. Почти перед показом результата нам. То есть на момент работы HAVING-а у столбцов ещё нет этих имён. После присвоения алиасов идёт только сортировка. Поэтому только в сортировке можно использовать алиасы. Только в блоке Order by.
Самые сложные вопросы это как проектировать БД, т.к я этим не занимался. Предложил два решения одной задачи. Есть таблица и в ней строка. Пользователь хочет вводит новые данные в поле. Вопрос как сохранить историю изменений. Я ответил что можно в этой же таблице создавать новые строки. Типо в строке записывается 1 строка основная, а следующие строки фиксируют изменения и являются наследниками. Выводится по дате последняя строка. Второй ответ это создать ещё таблицу связанную с первой таблицей и записывать туда сроки изменения, далее по дате выводить. Может тоже вопросы такие рассмотреть.
Владимир, здравствуйте! Отличная задача. Хорошее решение. Второй способ, чаще всего, более предпочтительный, потому, что в исходной таблице не нарушается первичный ключ.
У меня нет айтишного образования, самостоятельно изучал sql. Всего прошел два собеседования с тестовыми заданиями. Задания были проще, так как в них не было таких подвохов. Впрочем, меня все равно не взяли, но полагаю, это связано с проблемами в коммуникабельности
Добрый вечер. Когда ответы? Некоторые задачи решил, к примеру 3-ию одной формулой, 2-ую двумя формулами всё-таки вышло, а 1-ую как? когда ответы, когда пояснения выпустите?