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






Вторая часть выражения оценивает, когда вы используете 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 не сработало для вас, но вышеперечисленное должно помочь.
В MySQL всегда есть оператор МЕЖДУ И....
Какую ошибку вы получили при первой попытке? Это определенно должно сработать. Однако обратите внимание, что у второй формы неправильный синтаксис. Это должно быть amount >= 24.94 and amount <= 29.94.
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, так и> <, чтобы убедиться, что они работают одинаково в одном из моих запросов. Так что да, оба работают.
Вы и PConroy правы, да с моей стороны. Я должен был добавить имя столбца как часть второго условия.