Уроки SQL / Базы данных. Практическая задача #1. Оптимизация запроса. MySql / Илья Хохлов

Поделиться
HTML-код
  • Опубликовано: 4 ноя 2024

Комментарии • 28

  • @operhause
    @operhause 3 года назад +11

    Походу запилил видос пока ждал выгрузку данных))) а мои 15 минут жизни кто теперь вернет! Я же ждал ответ! )))

  • @marysparrow2522
    @marysparrow2522 4 года назад +7

    Отлично! Побольше задачек. Осилю курс обучения и сразу за задачки! Благодарю!

    • @PrimeSoft
      @PrimeSoft  4 года назад +1

      Мария, спасибо! Здорово, что Вы с нами!

  • @anreechase8020
    @anreechase8020 Год назад

    Было бы интересно узнать про доступ в базу данных из Delphi. Дело в том, что стандартные средства работы с базами данных неудобные и хотелось бы сделать свой графический интерфейс для ввода информации и запуска запросов. Само собой сама база данных будет сделана в штатном графическом интерфейсе, типа SSMS для SQL Server, но в нем неудобно делать рутинный ввод информации и запуск рабочих запросов и хотелось бы сделать свой простенький интерфейс, например в RAD Studio. Дело в том, что есть база и в неё надо по 10 раз в день вводить информацию о своем состоянии и желательно сделать что-то простое и быстрое.

  • @Megagundar
    @Megagundar 3 года назад +8

    Итак, есть склад, давайте представим у нас есть склад, большой склад, на этом складе есть контейнеры, есть контейнеры, контейнеров много и в каждом контейнере лежат коробки, в каждом контейнере много коробок... у нас есть на складе контейнеры, в контейнерах есть коробки
    я так и не понял, есть ли у нас склад, контейнеры и коробки, автор, освети эту тему более подробно пожалуйста 🙏🏼

    • @PrimeSoft
      @PrimeSoft  3 года назад +1

      Здравствуйте, Михаил!
      Спасибо за обратную связь. Стараюсь теперь меньше повторяться.

    • @pollyIV
      @pollyIV 3 года назад +2

      🤣

  • @Art-ub1sg
    @Art-ub1sg 4 года назад +2

    Спасибо! Как раз перед собеседованием немного натаскаться.
    Пересмотрел половину ваших видео уже)

    • @PrimeSoft
      @PrimeSoft  4 года назад

      И Вам спасибо! Любопытно потом было бы узнать результат! Удачи Вам на собеседовании! Присылайте интересные вопросы - вместе разберём! :)

    • @Art-ub1sg
      @Art-ub1sg 4 года назад +3

      @@PrimeSoft Хорошо, на следующей неделе напишу)

    • @FAU5390
      @FAU5390 3 года назад

      @@Art-ub1sg ну что, взяли?)

    • @misteranderson6058
      @misteranderson6058 Год назад

      @@FAU5390 походу нет)

  • @PrimeSoft
    @PrimeSoft  4 года назад +4

    Друзья, есть ли предположения по оптимизации запроса?

    • @magzhanamangeldiuly8221
      @magzhanamangeldiuly8221 4 года назад

      За чем ID_CONTAINER_MOVE? можно при перемещении простотовлять ID_CONTAINER, А если нужно информация о старом контейнере то надо добавлять колтнку OLD_CONTAINER_ID, тогда при запросе у тебя будет 1 условие

    • @sinosha
      @sinosha 4 года назад

      Здравствуйте, отличные уроки. Я начинающий. У меня проблема с одной задачой, если можете помогите плз.
      Не могу найти запрос для такой задачи:
      Мне нужен запрос, который показывает количество покупок, совершенных клиентами. В нем должны отображаться только клиенты, совершившие более 1 покупки. Результат должен содержать следующие поля:
      (Имя, Фамилия) , Количество покупок. У меня команда как-то суммирует общее количестко.
      Талблицы.
      Clients
      Products
      Orders
      SELECT
      Clients.FirstName AS "First Name",
      Clients.LastName AS "Last Name",
      count(*) AS "Number of Orders"
      FROM Orders
      JOIN Clients ON Clients.ClientID=Orders.ClientID
      GROUP BY Clients.firstname, Clients.lastname;

    • @letronas
      @letronas 4 года назад

      @@sinosha нужно понимать, какие данные хранятся в таблице Orders (в каком виде и как это вообще выглядит). Если с продуктами и и клиентами все интуитивно понятно)
      Ну и я бы лично для себя бы все писал в одном стиле и со смыслом.
      SELECT
      Clients.FirstName AS "First Name",
      Clients.LastName AS "Last Name",
      count(*) AS "Number of Orders"
      FROM Clients
      INNER JOIN Orders ON Clients.ClientID=Orders.ClientID
      GROUP BY Clients.FirstName , Clients.LastName
      HAVING count(*) > 1 -- вот этого железно не хватало

    • @МаксиРафа
      @МаксиРафа 3 года назад

      И как всё-таки оптимизируется этот запрос?

    • @andreybalin9314
      @andreybalin9314 3 года назад +2

      1. Заменить or на два запроса с union
      2. Использовать индексы
      3. Переписать запрос на group by idconteiner и having
      4. Вся таблица conteiners пойдет left join-ном к предыдущей выборке group by

  • @jns8223
    @jns8223 3 года назад

    Добрый день ,подскажите ,пожалуйста,что такое cte и как правильно его писать? Пока не совсем могу это понять. Cte это глубина запроса? Где бы почитать более подробно? Заранее благодарю

  • @asyncawait2839
    @asyncawait2839 2 года назад +2

    Поле "NOMER"? Серьезно? А че "id_deliver" тогда? А не "nomer_DoStAvCHiK"?

  • @vadimgavrilov573
    @vadimgavrilov573 2 года назад

    select * from containers c
    join
    (select ID_CONTAINER, ID_CONTAINER_MOVE ,sum(length*height*width/10000) as volume
    FROM boxes b
    WHERE b.ID_STOCK =1
    AND b.STATUS =0
    AND b.NN_REZERV =0
    GROUP BY ID_CONTAINER, ID_CONTAINER_MOVE HAVING volume>50
    order by volume) b
    on (c.id=b.ID_CONTAINER and b.ID_CONTAINER_MOVE=0) or c.ID =b.ID_CONTAINER_MOVE
    WHERE c.STATUS = 0
    У меня 24 контейнера получается. Где ошибка?

  • @Geooos
    @Geooos 4 года назад +3

    Сделать JOIN таблиц CONTAINERS и BOXES, а условие указать в предложении HAVING?

    • @PrimeSoft
      @PrimeSoft  4 года назад +1

      Здравствуйте! Использование having - неплохая идея! Посмотрите, еще, пожалуйста, это решение: ruclips.net/video/XdlYeMZBesA/видео.html

  • @yaroslavpiddubnyak2025
    @yaroslavpiddubnyak2025 3 года назад

    Пустые контейнеры понаотправляете. :)
    Там нужно на 1000000 делить.

    • @PrimeSoft
      @PrimeSoft  3 года назад

      Ярослав, спасибо, что приняли участие в решении задачи! :)

  • @androidkasha
    @androidkasha 3 года назад +1

    много флуда, надо было отедлить в отдельное видео часть про конфигурацию это не всем интересно

  • @gunscheler8622
    @gunscheler8622 2 года назад

    Зачем по 5 раз повторять ненужные фразы? Типо как про кофе?

  • @0992timik
    @0992timik 2 года назад

    SELECT *
    FROM containers c
    join ( select b.ID_CONTAINER, b.ID_CONTAINER_MOVE, sum(width * height * length/10000) > 50 check_value
    from boxes b
    where b.ID_STOCK = 1
    and b.STATUS = 0
    and b.NN_REZERV = 0
    and b.ID_CONTAINER_MOVE = 0
    GROUP BY b.ID_CONTAINER, b.ID_CONTAINER_MOVE) as t
    on ((t.ID_CONTAINER = c.ID and t.ID_CONTAINER_MOVE = 0) OR (t.ID_CONTAINER_MOVE = c.ID))
    WHERE c.STATUS = 0 and check_value is true
    так правильно?