Условие 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

Зарегистрируйтесь или войдите

Регистрация через Google

Регистрация через 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().

Да, Mysql позволяет выполнять условную логику. ЕСЛИ функция принимает 3 параметра УСЛОВИЕ, ИСТИННЫЙ РЕЗУЛЬТАТ, ЛОЖНЫЙ РЕЗУЛЬТАТ.

Итак, логика

, если report.type = 'p'
    сумма = сумма
еще
    сумма = -1*сумма
 

SQL

 ВЫБРАТЬ
    id, IF(report.type = 'P', абс(сумма), -1*абс(сумма)) как сумма
ОТ отчета
 

Вы можете пропустить abs(), если все «нет» равны только +ve

0

 ВЫБРАТЬ id, количество
ОТ отчета
ГДЕ тип = 'P'
СОЮЗ
ВЫБЕРИТЕ идентификатор, (сумма * -1) КАК сумма
ОТ отчета
ГДЕ тип = 'N'
ЗАКАЗАТЬ ПО id;
 

1

Вы также можете попробовать это

 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 НАЧИНАТЬ ЕСЛИ (исходная_скорость>

200), ТО УСТАНОВИТЬ Discount_rate=original_rate*. 5; КОНЕЦ ЕСЛИ; выберите скидку_ставка; END$$ РАЗДЕЛИТЕЛЬ $$;

Затем возьмите две переменные и установите для них значения, как показано ниже:

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*.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *