2008-10-09 4 views
3

Я пытаюсь сделать выбор, который рассчитывает выплаты партнеров.Как иметь диапазон в инструкции MySQL If?

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

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 не оценивает вторую часть условия. Btw не вызывает синтаксическую ошибку, и выбор возвращает результаты.

Перед тем, как выше, я попробовал то, что я предполагал, будет работать как «amount between 24.94 AND 29.94», это вызвало ошибку. поэтому я попробовал «amount >= 24.94 AND <= 29.94»

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

ответ

6

Вторая часть выражения вычисляется при использовании 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 не работает для вас, но выше должен делать эту работу.

1

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

+0

Вы и PConroy правы, дух с моей стороны. Я должен был добавить имя столбца как часть второго условия. – 2008-10-09 13:44:20

1
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 и с> <, чтобы убедиться, что они работали одинаково в одном из моих запросов. Так что да, оба работают.

Смежные вопросы