Получить наибольшее/наименьшее значение из 2 столбцов

У меня есть эта таблица:

  BP1             BP2
 -----------------------------
 140              80
 153              88
 90               162
 98               214
 98               69

Я хочу организовать его в 2 столбца: один с высоким BP, а другой с низким BP:

Ожидаемый результат:

BP_High        BP_Low
---------------------------------
140             80
153             88
162             90
214             98
98              69

*все значения целые

Я пробовал:

 SELECT CASE WHEN BP1 > BP2 THEN BP1
             WHEN BP1 < BP2 THEN BP2 END BP_High,
        CASE WHEN BP1 > BP2 THEN BP2
             WHEN BP1 < BP2 THEN BP1 END BP_Low 
FROM Table

а то не получается...у меня все перепуталось:

BP_High        BP_Low
---------------------------------
140             80
153             88
90             162
98             214
98              69

Я также пробовал:

 SELECT CASE WHEN BP1 > BP2 THEN BP1
             ELSE BP2 END BP_High,
        CASE WHEN BP1 > BP2 THEN BP2
             ELSE BP1 END BP_Low
 FROM Table 

Есть ли другой способ, чем CASE WHEN, чтобы получить наибольшее/наименьшее значение из 2 столбцов?

Вы уверены, что столбцы являются int, а не varchars или подобными?

TZHX 10.01.2023 09:24

похоже, код работает так, как вы хотите, поэтому в вашем вопросе чего-то не хватает, из-за чего он ведет себя по-другому для вас: dbfiddle.uk/5QDjTpjy

TZHX 10.01.2023 09:32
ReactJs | Supabase | Добавление данных в базу данных
ReactJs | Supabase | Добавление данных в базу данных
Это и есть ваш редактор таблиц в supabase.👇
Понимание Python и переход к SQL
Понимание Python и переход к SQL
Перед нами лабораторная работа по BloodOath:
2
2
73
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Ваша третья попытка почти верна, и вы действительно можете использовать выражения CASE здесь:

SELECT
    CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
    CASE WHEN BP1 < BP2 THEN BP1 ELSE BP2 END AS BP_Low
FROM yourTable;

В других базах данных, таких как MySQL, Postgres или SQLite, доступны скалярные функции LEAST() и GREATEST(). В этих базах данных ваш запрос может быть упрощен до:

SELECT
    GREATEST(BP1, BP2) AS BP_High,
    LEAST(BP1, BP2) AS BP_Low
FROM yourTable;

SQL Server 2022 поддерживает обе функции.

Zhorov 10.01.2023 09:21

@Zhorov Ну, пришло время ... надеюсь, они также представят лучшую поддержку регулярных выражений :-)

Tim Biegeleisen 10.01.2023 09:22

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