Select 字段基于 MySQL 中的值

Select field based on value in MySQL

有mysqltablefoo:

a | b | c
----------
1 | 2 | 0
2 | 3 | 1
3 | 4 | 0

和一个查询

SELECT a-b as subA, b-a as subB FROM foo;

subA | subB
-----------
 -1  |   1
 -1  |   1
 -1  |   1

我如何select a-b as sum 如果 c = 0 和 b-a as sum 如果 c = 1,以便我得到这个结果:

sum
---
-1
 1
-1

您可以使用 case 表达式:

select f.*,
    case c 
        when 0 then a - b 
        when 1 then b - a
    end as res
from foo f

如果 c 总是 01,我们可以用 sign():

select f.*, sign(c - 0.5) * (b - a) as res 
from foo f

这很简单(看SQLize.online):

SELECT 
    a-b as subA, 
    b-a as subB,
    CASE 
        WHEN c = 0 THEN a-b
        WHEN c = 1 THEN b-a
    END as sum
FROM foo;

结果:

+======+======+=====+
| subA | subB | sum |
+======+======+=====+
| -1   | 1    | -1  |
+------+------+-----+
| -1   | 1    | 1   |
+------+------+-----+
| -1   | 1    | -1  |
+------+------+-----+
SELECT (a-b)*(1-2*c) AS `sum`
FROM foo