#mysql
#mysql
Вопрос:
Пример:
select orderid
from `orders`
where sum(price) <= 150 and status=unpaid and ownerid=110786
но это не сработало.
Подробно: я хочу найти все заказы от клиента (ownerid), где статус НЕОПЛАЧЕН до (цена) 150.
Это необходимо, потому что я хочу позволить клиентам оплачивать столько заказов, сколько они могут, из доступных средств.
Для ОТВЕТА № 1 может работать так, как ожидалось, но в коде есть какая-то ошибка, поскольку он не генерирует требуемый результат, и когда я также добавил итоговые значения, чтобы увидеть, работает ли значение, все строки показывают их двойную цену в этом поле вместо last-column-price current-column-priceзначения. Я не уверен, что мои данные имеют смысл, но я просто пытаюсь проиллюстрировать, что mysql возвращает в результате 🙂
Для ОТВЕТА № 2 вы написали status вместо paymentstatus, поэтому результат был пустым, но когда я исправил это и запустил следующий запрос:
выберите orderid, price, designname из заказов, где paymentstatus=’неоплаченный’ и ownerid= 110786 группируются по orderid с суммой (ценой) <= 50
RESULT SHOWN IS:
orderid price designname
114279 15 Premier Academy
114280 10 Troop
114386 15 Texas Tennis
114408 20 Nokia Developer
114508 15 Gold Lighthouse
КАК ВЫ МОЖЕТЕ ВИДЕТЬ, ОБЩАЯ ЦЕНА СОСТАВЛЯЕТ НЕ МЕНЕЕ 50 долларов, а 75 долларов. ПОЖАЛУЙСТА, ПОМОГИТЕ… Спасибо!
Также обратите внимание, что stackoverflow — замечательный сервис, но форматирование комментариев — действительно сложная работа. Пожалуйста, сделайте это как-нибудь проще. Я слишком много раз пытался форматировать комментарии таким образом, чтобы их можно было легко прочитать, но все усилия не увенчались успехом, поэтому теперь я пишу комментарии в разделе «Ответы на мои вопросы»
Однако на этот вопрос до сих пор нет правильного ответа. Хотя хорошие люди стараются изо всех сил, чтобы помочь мне. Я снова опубликовал этот вопрос, так как слишком долго никто не предлагал работоспособное решение, но на новый вопрос также не отвечают рабочим решением 🙂
Пожалуйста, ребята, помогите мне как-нибудь. То, что я пытаюсь сделать, — это то, что так или иначе делают все тележки. Если у клиента есть 10 заказов на 10 долларов США, каждый на общую сумму 100 долларов, но у него всего 50,00 долларов. Как он может проверить, сколько заказов может быть оплачено этой суммой? Это все, что мне нужно найти / закодировать.
Комментарии:
1. вам могут понадобиться кавычки, если «неоплаченный» — это строка
2. что это вам дает? ошибка? неправильный набор данных?
Ответ №1:
Я думаю, вы можете выполнить это с помощью переменных MySQL… используйте один в качестве текущего итога и примените предложение HAVING, чтобы отрезать его…
select
o.orderid,
o.price,
@RunningTotal := @RunningTotal o.price as TotalSoFar
from
orders o,
( select @RunningTotal := 0 ) sqlvars
where
o.ownerid = 110786
and o.status = unpaid
having
TotalSoFar <= 150
Переменная @runningTotal просто продолжает добавляться «на лету» и застревает в последнем столбце результата запроса, но остается просто переменной для следующей записи, которая определяет предложение WHERE . Итак, даже если у вас есть заказы, общая сумма которых достигает 200, 300 или чего угодно, предложение final HAVING отсечет их, используя столбец «TotalSoFar» в качестве основы для удаления всех остальных строк…
Комментарии:
1. Два приведенных выше ответа работают не так, как требуется: ( ПОЖАЛУЙСТА, ПОМОГИТЕ.
2. @HaiderAbbas, как не работает … сбой в SQL? неправильный результат? Можете ли вы показать некоторые примеры данных о том, что у вас есть, в сравнении с тем, что получается в результате? Не работать — это все равно, что сказать, что мне нужен камень, и не описать, какой камень мне нужен.
Ответ №2:
неясно, получаете ли вы сообщение об ошибке, но попробуйте это:
select orderid
from `orders`
where status=unpaid and ownerid=110786
group by orderid
having sum(price) <= 150
Комментарии:
1. БОЛЬШОЕ СПАСИБО ЗА ПОПЫТКУ ПОМОЧЬ, но он не выдает никаких ошибок и ничего не показывает. Просто пустое поле orderid. Пожалуйста, сообщите.
2. что вы получаете, когда пытаетесь «выбрать * из заказов, где ownerid = 110786 и status = неоплаченный»?
3. вы написали status вместо paymentstatus, поэтому результат был пустым, но когда я исправил это, я запустил: выберите orderid, price, designname
orders
, откуда paymentstatus=’неоплаченный’ и ownerid= 110786 группируйте по orderid с sum (price) <= 50 ПОКАЗАННЫЙ РЕЗУЛЬТАТ: orderid price designname 114279 15 Premier Academy 114280 10Отряд 32 114386 15 Техасский теннис 114408 0 Клуб шнауцеров 114409 0 Клуб Шнауцеров_2 114434 20 Разработчик Nokia 114508 15 Золотой маяк КАК ВЫ МОЖЕТЕ ВИДЕТЬ, ОБЩАЯ ЦЕНА СОСТАВЛЯЕТ НЕ МЕНЕЕ 50 долларов, а 75 долларов. ПОЖАЛУЙСТА, ПОМОГИТЕ… Спасибо!4. <pre> вы написали status вместо paymentstatus, поэтому результат был пустым, но когда я исправил это, я запустил: выберите orderid, price, designname
orders
, откуда paymentstatus=’неоплаченный’ и ownerid= 110786 группируйте по orderid с суммой (price) <= 50 ПОКАЗАННЫЙ РЕЗУЛЬТАТ: orderid price designname 114279 15 PremierАкадемия 114280 10 Отряд 32 114386 15 Техасский теннис 114408 0 Клуб Шнауцеров 114409 0 Клуб Шнауцеров_2 114434 20 Разработчик Nokia 114508 15 Золотой маяк КАК ВЫ МОЖЕТЕ ВИДЕТЬ, ОБЩАЯ ЦЕНА СОСТАВЛЯЕТ НЕ МЕНЕЕ 50 долларов, а 75 долларов. ПОЖАЛУЙСТА, ПОМОГИТЕ… Спасибо! </ pre>5. пожалуйста, обновите свой исходный пост — это трудно прочитать в комментариях