我有这个表:
BP1 BP2
-----------------------------
140 80
153 88
90 162
98 214
98 69
我想把它分成两列:一列是高血压,一列是低血压:
预期输出:
BP_High BP_Low
---------------------------------
140 80
153 88
162 90
214 98
98 69
*所有值都是int
我试过:
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什么时候为了从2列中获得最高/最低的值?
你的第三次尝试几乎是正确的,你实际上可以在这里使用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;