Выберите поле на основе значения в MySQL

#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  |
 ------ ------ -----