Как правильно сформировать SQL запрос?

Ссылка скопирована
3 января 2026 1 ответ

Есть запрос

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock  FROM product_stock  GROUP by modification_product_id

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock GROUP by modification_product_id

Он выдает нули:

Как правильно сформировать SQL запрос?

Мне нужно чтобы выдавало все записи где stock >0, пробую такие варианты но везде не верно:

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock  where stock >0  GROUP by modification_product_id

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock where stock >0 GROUP by modification_product_id

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock  FROM product_stock  where  IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) >0  GROUP by modification_product_id

SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock where IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) >0 GROUP by modification_product_id

SELECT @stock := IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock  FROM product_stock  where  @stock >0  GROUP by modification_product_id

SELECT @stock := IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock where @stock >0 GROUP by modification_product_id

Подскажите пожалуйста как правильно сформировать запрос, чтобы было where stock >0?
Всем добра

Дополнительно:

Отформатируй код - больно читать.

  • mkone112, +
  • select * from ( SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock  FROM product_stock  GROUP by modification_product_id )  where stock > 0

    select * from ( SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock GROUP by modification_product_id ) where stock > 0

    или

    SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock  FROM product_stock  GROUP by modification_product_id  having IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) > 0

    SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock GROUP by modification_product_id having IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) > 0

    как нибудь так

  • gsaw, Спасибо большое!!! выручил
  • За счет оборачивания запросов, то что на нижнем уровне было вычисляемым свойством на верхнем превращается в обычное скалярное значение, которое можно спокойно как фильтровать в where, так и сортировать.
    gsaw можно оформить в виде ответа.
  • Ответы:

    Вам нужно использовать HAVING:

    SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock   GROUP by modification_product_id  HAVING stock > 0

    SELECT IFNULL(SUM(if(product_stock.wait_stock =0,qnt,0)),0) stock FROM product_stock GROUP by modification_product_id HAVING stock > 0

    Нужно решить такую задачу?

    Опишите проблему, и специалист поможет с настройкой, исправлением ошибки или доработкой сайта. Подберём понятный план работ без лишней переписки.

    Заказать помощь
    Лучший ответ
    1
    Анна SEO Ответ

    Для формирования SQL запроса правильно следовать определенным шагам, чтобы обеспечить корректность и эффективность запроса. Вот несколько рекомендаций по созданию SQL запросов:

    1. Определите цель запроса: Прежде всего, определите, что именно вы хотите получить из базы данных. Это поможет определить, какие таблицы и какие столбцы вам понадобятся.

    2. Используйте ключевые слова: В SQL запросах используются ключевые слова, такие как SELECT, INSERT, UPDATE, DELETE, которые указывают, что именно вы хотите сделать с базой данных. Например, SELECT используется для извлечения данных, INSERT - для добавления данных, UPDATE - для обновления данных, DELETE - для удаления данных.

    3. Укажите таблицу: В запросе необходимо указать таблицу, с которой вы хотите работать. Например, SELECT * FROM users - выберет все данные из таблицы пользователей.

    4. Укажите условия: Если вам нужно выбрать определенные данные или выполнить операцию только для определенных записей, укажите условия с помощью ключевого слова WHERE. Например, SELECT * FROM users WHERE age > 18 - выберет всех пользователей старше 18 лет.

    5. Используйте функции: SQL предоставляет множество функций, которые могут быть использованы в запросах для выполнения различных операций. Например, функции сортировки, группировки, вычисления и т. д.

    Пример SQL запроса на языке PHP:

     18";
    $result = mysqli_query($connection, $query);
    while($row = mysqli_fetch_assoc($result)) {
        echo $row['name'] . "<br>";
    }
    ?&gt;

    18"; $result = mysqli_query($connection, $query); while($row = mysqli_fetch_assoc($result)) { echo $row['name'] . "<br>"; } ?&gt;

    Это простой пример запроса на выборку данных из таблицы пользователей, где возраст пользователей больше 18 лет. Не забывайте, что важно следить за безопасностью запросов и использовать параметризованные запросы для предотвращения SQL инъекций.

    Другие ответы (0)

    Пока нет других ответов. Будьте первым, кто поможет автору.

    Ответить на вопрос

    комментарий

    Ваш адрес email не будет опубликован. Обязательные поля помечены *

    Вам также может быть интересно