You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SQL实现:如何从两列提取最值生成高低血压列?

解决两列提取最大值和最小值的问题

问题描述

现有如下数据表:

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

需要将数据整理为两列:BP_High(每行两列的最大值)和BP_Low(每行两列的最小值),预期输出:

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

所有值均为整数类型

问题分析与修正

你尝试的第二种CASE WHEN语句逻辑是正确的,出现错误输出大概率是因为表名Table属于SQL关键字,需要用标识符引起来(不同数据库语法略有区别)。以下是修正后的写法:

正确的CASE WHEN写法

  • MySQL/MariaDB:
SELECT 
    CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
    CASE WHEN BP1 > BP2 THEN BP2 ELSE BP1 END AS BP_Low
FROM `Table`;
  • SQL Server:
SELECT 
    CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
    CASE WHEN BP1 > BP2 THEN BP2 ELSE BP1 END AS BP_Low
FROM [Table];
  • PostgreSQL/Oracle:
SELECT 
    CASE WHEN BP1 > BP2 THEN BP1 ELSE BP2 END AS BP_High,
    CASE WHEN BP1 > BP2 THEN BP2 ELSE BP1 END AS BP_Low
FROM "Table";

更简洁的替代方法:使用内置函数

几乎所有主流SQL数据库都提供了直接取多列最大/最小值的内置函数,比CASE WHEN更简洁高效:

1. MySQL/MariaDB/PostgreSQL/Oracle(SQL Server 2022+)

使用GREATEST()取最大值,LEAST()取最小值:

SELECT 
    GREATEST(BP1, BP2) AS BP_High,
    LEAST(BP1, BP2) AS BP_Low
FROM `Table`; -- 根据数据库替换标识符格式

2. SQL Server 低版本(2022之前)

用IIF()简化逻辑:

SELECT 
    IIF(BP1 > BP2, BP1, BP2) AS BP_High,
    IIF(BP1 > BP2, BP2, BP1) AS BP_Low
FROM [Table];

内容的提问来源于stack exchange,提问作者KapSht

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 11:20:54