#mysql #sql #case
#mysql #sql #случай
Вопрос:
Существует таблица mysql foo
:
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
Как я могу выбрать a-b as sum
, если c = 0 и b-a as sum
если c = 1, чтобы у меня был этот результат:
sum
---
-1
1
-1
Ответ №1:
SELECT (a-b)*(1-2*c) AS `sum`
FROM foo
Комментарии:
1. Отличная математика. Мне это нравится!
Ответ №2:
Вы можете использовать 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
Ответ №3:
Это довольно просто (посмотрите в 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 |
------ ------ -----