代码之家  ›  专栏  ›  技术社区  ›  jonny

SQL中的大值

  •  1
  • jonny  · 技术社区  · 14 年前

    好的,我必须把空值放在最后。查询应该在Oracle和MySQL下运行。

    我已经想到了

    ORDER BY
    
        CASE WHEN some_table.ord IS NULL THEN 9999999999 ELSE some_table.ord END
    

    我认为确定这个值的子查询在这里太难看了。

    更新

    问题是我能不能。。漂亮而不是99999999,这样查询在Oracle和MySQL中都能工作,

    how to put null values last

    3 回复  |  直到 7 年前
        1
  •  5
  •   Thilo    14 年前

    为空标志使用一个额外的列:

    order by 
       case when some_table.ord is null then 2 else 1 end ,
       some_table.ord
    

    order by coalesce(some_table.ord, 9999999999)
    
        2
  •  4
  •   Erich Kitzmueller    14 年前

    在甲骨文中,它只是

    ORDER BY some_table.ord NULLS LAST
    
        3
  •  0
  •   Bob Jarvis - Слава Україні    14 年前

    SELECT S.VAL1, S.VAL2, S.VAL3, COALESCE(S.ORD, O.MAX_ORD+1) AS ORD
      FROM SOME_TABLE S,
           (SELECT MAX(ORDER) AS MAX_ORD FROM SOME_TABLE) O
      WHERE S.whatever = whichever AND
            S.something <> something_else
      ORDER BY ORD
    

    不确定MySQL是否允许FROM列表中的子查询。这里的想法是避免使用魔术值来处理NULL情况。