Запрос условного выбора не работает при использовании порядка - PullRequest
0 голосов
/ 29 ноября 2018

Мне нужен простой запрос выбора.В условии я передаю значение, когда сумма больше, чем это значение, а затем возвращаем.если я пройду 4, тогда вернусь 2 строки ( в ID изображения-> 125,126 ), потому что сумма (сумма) этой 2 строки равна 10, что больше 4.

Ввод

enter image description here

Выход

enter image description here

он работает нормально, когда по этому запросу

SET @total:=0.0;

SELECT id,
       amount,
       price,
       @total := @total + Truncate((amount), 8) AS total_offers
FROM   table
WHERE  @total < 4;

если я использую заказ к тому времени, он не работает

SET @total:=0.0;

SELECT id,
       amount,
       price,
       @total := @total + Truncate((amount), 8) AS total_offers
FROM   table
WHERE  @total < 4
ORDER  BY price DESC;  

мне нужен заказ, как теперь ярешить эту проблему

Ответы [ 2 ]

0 голосов
/ 29 ноября 2018

Я думаю, что это должно работать для вас.

set @total:=0.0;
SELECT temp.id, temp.amount, temp.price, 
  @total := @total + Truncate(amount, 8) AS total_offers from (
     SELECT temp.* FROM table temp ORDER BY price DESC
  ) temp
where @total < 4
0 голосов
/ 29 ноября 2018

Я думаю, что начиная с MySQL 5.6, вам нужно было делать order by в подзапросе, когда вы используете переменные.Итак, это должно работать:

SELECT id, amount, price, total_offers
FROM (SELECT t.id, t.amount, t.price,
             @total := @total + Truncate(amount, 8) AS total_offers
      FROM (SELECT t.*
            FROM table t
            ORDER BY price DESC
           ) t CROSS JOIN
           (SELECT @total := 0) params
     ) t
WHERE total_offers < 4;

Обратите внимание, что это также изменяет сравнение для использования переменной.Оценка переменных в предложениях WHERE также не определена.

В MySQL 8.0 это гораздо проще записать как:

select t.*
from (select t.*,
             sum(amount) over (order by price desc) as total_amount
      from table
     ) t
where total_amount < 4;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...