如何通过结合COALESCE的2列订购?

时间:2016-12-03 16:51:22

标签: sql coalesce sql-order-by

我对订购SQL表有疑问。我无法在堆栈或谷歌上找到解决方案。我的表“得分”如下:

Name    Total   Tries  Game1  Game2  Game3
------------------------------------------
Sam     65      61     10     31     24             
Tom             55     11            30
Jim     65      58     9      34     22 
Dan     62      52     10     30     22

注意:“总计”列为COUNT(Game1 + Game2 + Game3)。

正如你所看到汤姆的总记录是空的,因为汤姆没有玩Game2。

我想订购我的表如下(最高优先级):

  1. 清空单元格(位于表格底部)
  2. 总计(ASC)
  3. 尝试(ASC)
  4. 所以我的表必须看起来像:

    Name    Total   Tries  Game1  Game2  Game3
    ------------------------------------------
    Dan     62      52     10     30     22
    Jim     65      58     9      34     22 
    Sam     65      61     10     31     24             
    Tom             55     11            30
    

    我必须使用哪种SQL查询?

    这就是我现在所拥有的,但它不会对“尝试”进行排序:

    SELECT name, Game1+Game2+Game3 AS Total, Game1, Game2, Game3, Tries
    FROM Score 
    ORDER BY CASE WHEN Tries or Game1 or Game2 or Game3 IS NULL THEN 0 ELSE 1 END DESC, 
             COALESCE(Game1,0) + COALESCE(Game2,1) + COALESCE(Game3,2) ASC
    

1 个答案:

答案 0 :(得分:0)

根据NULL中的Total声明,考虑CASEorder by代替。试试这个Order by

ORDER BY COALESCE(Total,99999999999) ASC,Tries ASC

99999999999将使NULL值在末尾排序,其他记录将按升序排序

ORDER BY case when Total is null then 0 else 1 end desc,Total ASC,Tries ASC