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

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

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

Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
3
0
14 263
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

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

Вы и PConroy правы, да с моей стороны. Я должен был добавить имя столбца как часть второго условия.

Brian Boatright 09.10.2008 17:44

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

Другие вопросы по теме