从MySQL中的其他列派生列的值

时间:2016-09-18 12:29:17

标签: mysql sql

我有一张这样的表:

 ----------------
|cloumn1|cloumn2|
-----------------
|   1   |    2  |
-----------------
|   3   |    1  |
-----------------
|   4   |    2  |
-----------------
|   1   |    1  |
-----------------

我需要从我的表中查询此结果:

 -------------------------------
|cloumn1|cloumn2|compare_result|
--------------------------------
|   1   |    2  |     smaller  |
--------------------------------
|   3   |    1  |     bigger   |
--------------------------------
|   4   |    2  |     bigger   |
--------------------------------
|   1   |    1  |     equal    |
--------------------------------

这意味着如果column1是较大的第2列,则第三列(compare_result)显示较小,如果较小则显示较小,等等......

3 个答案:

答案 0 :(得分:2)

您可以将CASE与多个WHEN语句结合使用,以获得所需的结果:

SELECT 
    column1, 
    column2,
    CASE 
        WHEN column1 > column2 THEN 'bigger'
        WHEN column1 < column1 THEN 'smaller'
        ELSE 'equal' 
    END as compare_result
FROM tablename

如果您的列不可为空,则上述查询将起作用(即它们不能为NULL)。

答案 1 :(得分:1)

您想使用case

select t.*,
       (case when column1 > column2 then 'bigger'
             when column1 < column2 then 'smaller'
             when column1 = column2 then 'equal'
             else '???'
        end) as compares_to
from t;

您可以将此逻辑包装在视图中,以便访问该表的任何人都可以看到它。

如果其中一个或两个值为'???',则会发生NULL

答案 2 :(得分:1)


您可以将查询用作

SELECT T.*,
   CASE 
    WHEN column1 < column2 THEN 'smaller'
    WHEN column1 > column2 THEN 'bigger'
    WHEN column1 = column2 THEN 'equal'
END AS compare_result
FROM TABLE_NAME T;