Как иметь диапазон в операторе MySQL If? - PullRequest
3 голосов
/ 09 октября 2008

Я пытаюсь сделать выбор, который рассчитывает партнерские выплаты.

мой подход довольно прост.

SELECT
 month(payments.timestmap)
,sum(if(payments.amount>=29.95,4,0)) As Tier4
,sum(if(payments.amount>=24.95<=29.94,3,0)) As Tier3
,sum(if(payments.amount>=19.95<=24.94,2,0)) As Tier2
FROM payments
GROUP BY month(payments.timestamp)

Выше не работает, потому что MySQL не оценивает вторую часть условия. Между прочим, это не вызывает синтаксическую ошибку, а выбор вернет результаты.

До того, как описанное выше я попробовал то, что, как я предполагал, будет работать как "amount between 24.94 AND 29.94", это вызвало ошибку. тогда я попытался "amount >= 24.94 AND <= 29.94"

Так можно ли сравнивать диапазон, используя IF в MySql?

Ответы [ 4 ]

7 голосов
/ 09 октября 2008

Вторая часть выражения оценивается при использовании AND -

SELECT
 month(payments.timestmap)
,sum(if(payments.amount>=29.95,4,0)) As Tier4
,sum(if(payments.amount>=24.95 AND payments.amount<=29.94,3,0)) As Tier3
,sum(if(payments.amount>=19.95 AND payments.amount<=24.94,2,0)) As Tier2
FROM payments
GROUP BY month(payments.timestamp)

Я не совсем уверен, почему предложение between не сработало для вас, но вышеприведенное должно сработать.

2 голосов
/ 09 октября 2008

В MySQL всегда есть оператор МЕЖДУ ... И ... .

1 голос
/ 28 сентября 2011
SELECT
month( payments.timestamp )
,sum( if( payments.amount >= 29.95, 4, 0 ) )  As Tier4
,sum( if( payments.amount BETWEEN 24.95 AND 29.94, 3, 0 ) ) As Tier3
,sum( if( payments.amount BETWEEN 19.95 AND 24.94, 2, 0 ) ) As Tier2
FROM payments
GROUP BY month( payments.timestamp )

Это также должно работать, я проверил как BETWEEN, так и>>, чтобы убедиться, что они работали одинаково в одном из моих запросов. Так что да, оба работают.

1 голос
/ 09 октября 2008

Какую ошибку дала вам ваша первая попытка? Это должно определенно работать. Однако обратите внимание, что вторая форма у вас неправильный синтаксис. Это должно быть amount >= 24.94 and amount <= 29.94.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...