Условие if в сортировке order by mysql
Задать вопрос
Вопрос задан
Изменён 3 года назад
Просмотрен 320 раз
Подскажите пожалуйста, есть таблица:
id|user_with|user_creator|fav_user_with|fav_user_creator| 1 | 10 | 15 | 1 | 0 | 2 | 10 | 15 | 0 | 1 | 3 | 15 | 10 | 0 | 1 | 4 | 15 | 10 | 1 | 0 | 5 | 15 | 10 | 0 | 1 |
Как я могу сделать сортировку.
Если user_creator = 15
и fav_user_creator = 1
то order by fav_user_creator desc, id desc
Если user_with = 15
и fav_user_with = 1
то order by fav_user_with desc, id desc
.
Должно получиться при первом условии:
id|user_with|user_creator|fav_user_with|fav_user_creator| 2 | 10 | 15 | 0 | 1 | 5 | 15 | 10 | 0 | 1 | 4 | 15 | 10 | 1 | 0 | 3 | 15 | 10 | 0 | 1 | 1 | 10 | 15 | 1 | 0 |
Должно получиться при втором условии:
id|user_with|user_creator|fav_user_with|fav_user_creator| 4 | 15 | 10 | 1 | 0 | 5 | 15 | 10 | 0 | 1 | 3 | 15 | 10 | 0 | 1 | 2 | 10 | 15 | 1 | 0 | 1 | 10 | 15 | 0 | 1 |
4
… ORDER BY CASE WHEN user_creator = 15 AND fav_user_creator = 1 THEN fav_user_creator WHEN user_with = 15 AND fav_user_with = 1 THEN fav_user_with END desc, id desc
2
Зарегистрируйтесь или войдите
Регистрация через Facebook
Регистрация через почту
Отправить без регистрации
Почта
Необходима, но никому не показывается
Отправить без регистрации
Почта
Необходима, но никому не показывается
Операторы MySQL If-Then — Подсказка для Linux
Объявление «IF» часто используется в сохраняемых программах MySQL, которые применяют простую условную конструкцию. Оператор IF-THEN позволяет выполнять серию операторов SQL на основе указанного условия. Он возвращает True, False или NULL как одно из трех значений. В этом руководстве мы поймем, как обработать часть команды SQL, относящуюся к заданному условию, с помощью оператора MySQL IF-then.
Синтаксис:
>> IF условие THEN операторы END IF;
В следующем синтаксисе:
- Если это’s предложение ключевого слова для условия, которое должно быть запущено.
- Условие: После предложения «IF» это ограничение должно быть выполнено.
- Заявления: Может быть любой фрагмент кода, например, выбрать, получить, обновить, удалить. Если условие оценивается как ИСТИНА, то будут выполнены операторы после предложения «THEN».
- ENDIF: Это конец предложения «ЕСЛИ». После этого власть переходит к следующему пункту.
Давайте начнем понимать If-then с запуска командной оболочки MySQL. Введя пароль, мы готовы к работе.
Пример 01: MySQL IF () Функция:
Чтобы получить представление об операторе If, мы должны сначала протестировать функцию IF (). В приведенном ниже примере мы определили функцию IF () в запросе SELECT и задали ей условие, чтобы проверить, больше ли 2, чем 9, или нет. Если условие действительно, оно вернет первое значение после условия; в противном случае — второе. Поскольку наше условие недействительно, оно возвращает false.
Предположим, что таблица «порядок», как показано на добавленном изображении.
>> ВЫБРАТЬ * ОТ data.order;
Давайте посмотрим на функцию IF (), выполняемую в этой таблице. Мы выбрали три столбца. Если в столбце «Статус» указано значение «Оплачено», тогда метод IF () вернет «Отлично», в противном случае — «Плохо». Возвращаемое значение функции IF () будет сохранено в новом столбце «Примечания», созданном во время выполнения. Теперь мы можем увидеть результат, как показано ниже.
Пример 02: Оператор MySQL IF-THEN
Мы пробовали использовать функцию IF () в командной строке MySQL. Давайте попробуем новый пример оператора IF-Then в графическом интерфейсе MySQL при использовании процедур. Откройте MySQL Workbench 8.0 и сначала подключитесь к базе данных.
Мы работали над базой данных «data»; затем вы должны указать команду «использовать данные», чтобы использовать ее в Workbench. Нажмите значок вспышки, чтобы запустить его. Вы должны знать, что операторы If-then работают с процедурами хранилища, как показано ниже. Мы объявили разделитель ключевых слов для запуска процедуры сохранения. Процедура myResult принимает два аргумента. После оператора BEGIN у нас есть оператор IF, который проверяет условие. Если условие удовлетворяется, то будет выполнена команда «THEN» и следующий за ней оператор. Если условие ложно, то будут реализованы операторы после «END IF».
Поскольку процедура myResult принимает два аргумента, мы должны передать в нее два значения.
После передачи значений в процедуру хранения мы должны вызвать процедуру, чтобы увидеть результаты оператора If-then.
И результат представлен ниже. Он рассчитал Discount_rate с помощью оператора If-then.
Если вы хотите снова использовать ту же хранимую процедуру, вам нужно сначала отбросить эту процедуру с помощью приведенной ниже команды DROP, а затем выполнить ее снова.
Пример 03: Оператор MySQL IF-THEN-ELSE
Давайте перейдем к более широкому уровню. На этот раз мы рассмотрим оператор IF-Then-Else, используя хранимую процедуру в нашем примере. Взгляните на приведенную ниже таблицу «студент» с некоторыми полями в ней.
>> ВЫБРАТЬ * ОТ data.student;
Прежде всего, вы должны использовать базу данных «data», чтобы использовать таблицу «student» в нашей процедуре магазина. Для этого введите следующую команду в терминале командной строки MySQL.
>> использовать данные;
Теперь объявите разделитель, а затем начните писать процедуру сохранения. Команда «CREATE» будет использоваться для объявления или создания процедуры, как всегда. «Детали» процедуры основывались на двух аргументах. После этого процедура сохранения начинается с ключевого слова BEGIN. Слово «DECLARE» использовалось для определения переменной «Sub» для субъектов. Запрос «SELECT» был использован для выбора значений столбца «Subject» из таблицы «student» и их сохранения во вновь объявленной переменной «Sub». Предоставленное пользователем значение «S_Subject» будет сравниваться со значением столбца «Subject». В операторе «IF», если предоставленное пользователем значение «S_Subject» совпадает со значением столбца «Subject», тогда относительный оператор «THEN» будет выполняться вместе с его операторами внутри. Эта процедура будет обрабатываться от первого оператора «IF» ко второму, а затем к третьему оператору «ELSEIF». Если последняя часть «ELSEIF» не соответствует значению, предоставленному пользователем, управление будет передано оператору «END IF».
Давайте закончим разделитель следующей командой.
Мы должны вызвать процедуру хранилища, выполнив ее с запросом CALL и указав аргументы в круглых скобках. Поскольку мы указали «Maths» в качестве значения, тогда будет сгенерирован новый столбец для вывода операторов «THEN» и «SET».
Давайте проверим вновь созданный столбец «S_Cource» с помощью приведенной ниже команды. Как видите, по курсу «Математика» у нас есть соответствующий результат.
Вызовите процедуру еще раз, изменив первый аргумент, то есть тему. На этот раз мы предоставили тему «Компьютер».
Выбрав значение столбца «S_Cource», вы увидите, что у нас есть значение, относящееся к теме «Компьютер», то есть «ИТ».
И снова мы вызываем процедуру, как показано ниже, путем модификации первого аргумента. На этот раз мы поставили тему «История».
Снова вызвав столбец «S_Cource», вы можете увидеть, как мы получили результат «Masters in History» относительно недавно предоставленной темы, например, History.
Вывод:
Мы сделали все примеры, необходимые для разработки операторов If-then, например, функция IF (), простой оператор If-then, оператор If-then-else.
mysql — ‘IF’ в операторе ‘SELECT’ — выберите выходное значение на основе значений столбца
спросил
Изменено 3 года, 5 месяцев назад
Просмотрено 1,5 млн раз
ВЫБРАТЬ id, сумма ИЗ отчета
Мне нужно сумма
будет сумма
, если report.type='P'
и -сумма
, если report.type='N'
. Как мне добавить это к вышеуказанному запросу?
- mysql
- sql
- база данных
0
ВЫБЕРИТЕ идентификатор, ЕСЛИ (тип = 'P', количество, количество * -1) как количество ОТ отчета
См. http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions. html.
Кроме того, вы можете обрабатывать, когда условие равно null. В случае нулевой суммы:
ВЫБЕРИТЕ идентификатор, ЕСЛИ (тип = 'P', IFNULL (сумма, 0), IFNULL (сумма, 0) * -1) как сумма ОТ отчета
Часть IFNULL(amount,0)
означает , когда сумма не равна нулю, возвращаемая сумма иначе возвращается 0 .
6
Используйте оператор case
:
select id, отчет о случае.тип когда 'P' тогда сумма когда 'N' тогда -сумма конец как сумма от `отчет`
3
ВЫБЕРИТЕ Название компании, СЛУЧАЙ, КОГДА Страна В («США», «Канада»), ТОГДА «Северная Америка» КОГДА Страна = "Бразилия", ТОГДА "Южная Америка" ИНАЧЕ 'Европа' ЗАКАНЧИВАЕТСЯ КАК КОНТИНЕНТ ОТ поставщиков ЗАКАЗАТЬ ПО CompanyName;
1
выбрать идентификатор, случай когда тип_отчета = 'P' затем сумма когда тип_отчета = 'N' затем -сумма иначе ноль конец со стола
0
Самый простой способ — использовать IF().
Итак, логика
, если report.type = 'p' сумма = сумма еще сумма = -1*сумма
SQL
ВЫБРАТЬ id, IF(report.type = 'P', абс(сумма), -1*абс(сумма)) как сумма ОТ отчета
Вы можете пропустить abs(), если все «нет» равны только +ve
0
ВЫБРАТЬ id, количество ОТ отчета ГДЕ тип = 'P' СОЮЗ ВЫБЕРИТЕ идентификатор, (сумма * -1) КАК сумма ОТ отчета ГДЕ тип = 'N' ЗАКАЗАТЬ ПО id;
Вы также можете попробовать это
SELECT id , IF(type='p', IFNULL(amount,0), IFNULL(amount,0) * -1) как сумма ИЗ таблицы
Оператор MySQL IF — javatpoint
следующий → ← предыдущая Оператор IF используется в хранимых программах, реализующих базовую условную конструкцию в MySQL. На основе определенного условия он позволяет нам выполнять набор операторов SQL. Он возвращает одно из трех значений True, False или NULL. Мы можем использовать этот оператор тремя способами: IF-THEN, IF-THEN-ELSE, IF-THEN-ELSEIF-ELSE, а также можем завершить его с помощью END-IF. Рассмотрим подробно каждое из этих утверждений. Оператор ЕСЛИ-ТОЭтот оператор выполняет набор запросов SQL на основе определенных условий или выражений. Синтаксис оператора IF-THEN следующий: ЕСЛИ условие ТО заявления; КОНЕЦ ЕСЛИ; В приведенном выше синтаксисе мы должны указать условие для выполнения кода. Если оператор оценивается как true, он будет выполнять оператор между IF-THEN и END-IF. В противном случае он выполнит оператор, следующий за END-IF. ПримерБлок IF…ENDIF выполняется с сохраненными программами и заканчивается точкой с запятой, как показано в следующем примере. РАЗДЕЛИТЕЛЬ $$ СОЗДАТЬ ПРОЦЕДУРУ myResult(original_rate NUMERIC(6,2),OUT Discount_rate NUMERIC(6,2)) НЕТ SQL НАЧИНАТЬ ЕСЛИ (исходная_скорость> Затем возьмите две переменные и установите для них значения, как показано ниже: mysql> установить @p = 600; mysql> установить @dp = 500; Теперь вызовите функцию хранимой процедуры, чтобы проверить вывод. mysql> вызовите myResult(@p, @dp) Мы получим следующий вывод: Оператор IF-THEN-ELSEЕсли мы хотим выполнить другие операторы, когда условие, указанное в блоке IF, не оценивается как истинное, можно использовать этот оператор. Синтаксис оператора IF-THEN-ELSE приведен ниже: ЕСЛИ условие ТО заявления; ЕЩЕ else-операторы; КОНЕЦ ЕСЛИ; В приведенном выше синтаксисе мы должны указать условие для выполнения кода. Если оператор оценивается как true, он будет выполнять оператор между IF-THEN и ELSE. В противном случае он выполнит оператор, следующий за ELSE и END-IF. Давайте изменим вышеприведенную хранимую процедуру myResult() . Итак, сначала удалите хранимую процедуру myResult() с помощью следующей команды: Mysql> Процедура DROP myResult; Затем напишите для этого новый код, как показано ниже: РАЗДЕЛИТЕЛЬ $$ СОЗДАТЬ ПРОЦЕДУРУ myResult(original_rate NUMERIC(6,2),OUT Discount_rate NUMERIC(6,2)) НЕТ SQL НАЧИНАТЬ ЕСЛИ (исходная_скорость>200), ТО УСТАНОВИТЬ Discount_rate=original_rate*.5; ЕЩЕ УСТАНОВИТЬ Discount_rate=original_rate; КОНЕЦ ЕСЛИ; выберите скидку_ставка; END$$ РАЗДЕЛИТЕЛЬ ; Затем создайте две переменные и установите для них значения, как показано ниже: mysql> установить @p = 150; mysql> установить @dp = 180; Теперь вызовите функцию хранимой процедуры, чтобы получить результат. mysql> вызовите myResult(@p, @dp) Это даст следующий вывод: Оператор IF-THEN-ELSEIF-ELSEЕсли мы хотим выполнить оператор на основе нескольких условий, можно использовать этот оператор. Синтаксис оператора IF-THEN-ELSE приведен ниже: ЕСЛИ условие ТО заявления; ELSEIF elseif-условие THEN elseif-операторы; … ЕЩЕ else-операторы; КОНЕЦ ЕСЛИ; В приведенном выше синтаксисе, если условие становится истинным, выполняется ветвь IF-THEN. В противном случае он будет оценивать elseif-условие. Когда условие elseif становится истинным, выполняется оператор elseif. Если это условие также ложно, оно будет оценивать следующее elseif-условие. Таким образом, здесь мы будем оценивать несколько elseif-условий, и если какое-либо условие в IF и ELSE-IF не станет истинным, то будет выполнен оператор ветки ELSE. Давайте изменим приведенную выше хранимую процедуру myResult(). Итак, сначала удалите хранимую процедуру myResult() с помощью следующей команды: Mysql> Процедура DROP myResult; Затем напишите для этого новый код, как показано ниже: РАЗДЕЛИТЕЛЬ $$ СОЗДАТЬ ПРОЦЕДУРУ myResult(original_rate NUMERIC(6,2),OUT Discount_rate NUMERIC(6,2)) НЕТ SQL НАЧИНАТЬ ЕСЛИ (исходная_скорость>500), ТО УСТАНОВИТЬ Discount_rate=original_rate*. |