如何通过结合 COALESCE 的 2 列进行排序?
How to order by 2 columns combining COALESCE?
我有一个关于订购 SQL table 的问题。而且我无法在堆栈或 google 上找到解决方案。我的table"Score"好像是这样的:
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
注意:"Total" 列为 COUNT(Game1 + Game2 + Game3)。
可以看到Tom的Total记录是空的,因为Tom没有玩Game2
我想按如下方式订购 table(优先级最高-最低):
- 空单元格(在 table 的底部)
- 总计 (ASC)
- 尝试 (ASC)
所以我的 table 必须看起来像:
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 查询?
这是我此刻的,但它不会在 "Tries":
上排序
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
根据 order by
中的 CASE
语句,考虑到 NULL
而不是 Total
中的 empty。试试这个 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
我有一个关于订购 SQL table 的问题。而且我无法在堆栈或 google 上找到解决方案。我的table"Score"好像是这样的:
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
注意:"Total" 列为 COUNT(Game1 + Game2 + Game3)。
可以看到Tom的Total记录是空的,因为Tom没有玩Game2
我想按如下方式订购 table(优先级最高-最低):
- 空单元格(在 table 的底部)
- 总计 (ASC)
- 尝试 (ASC)
所以我的 table 必须看起来像:
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 查询?
这是我此刻的,但它不会在 "Tries":
上排序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
根据 order by
中的 CASE
语句,考虑到 NULL
而不是 Total
中的 empty。试试这个 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