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
总是 0
或 1
,我们可以用 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
有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
总是 0
或 1
,我们可以用 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