sql 2 select with with order by

时间:2018-08-23 07:41:47

标签: sql

我有一张这样的桌子

ID            qty    price      
-----------  -----   -----       
1             0      5000
2             0      3000
3             3      1000
4             2      2000

我想显示如下结果:

ID            qty    price      
-----------  -----   -----       
4             2      2000
3             3      1000
1             0      5000
2             0      3000

如上所示:

qty > 0时:ORDER BY price DESC

之后:qty = 0时:ORDER BY price DESC

有人可以帮我显示这样的结果吗?

6 个答案:

答案 0 :(得分:7)

首先使用case 表达式对数量大于0的行进行排序。

然后按价格降序订购。 (将在数量> 0且数量= 0的组内进行排序。)

order by case when qty > 0 then 0 else 1 end, price desc

答案 1 :(得分:1)

如果我的理解正确,您可以尝试使用UNION ALL进行分组,然后按顺序排序。

SELECT * FROM (
    SELECT ID,qty,price,1 grp
    FROM T
    WHERE qty > 0
    UNION ALL
    SELECT ID,qty,price,2 grp
    FROM T
    WHERE qty = 0
)t1
order by grp,price DESC

答案 2 :(得分:1)

colnames(X)
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 

mod$learner.model$feature_names    
[1] "Sepal.Length" "Sepal.Width"  "Petal.Length" "Petal.Width" 

答案 3 :(得分:0)

您可以使用CASE表达式  以及order by之类的

ORDER BY 
CASE WHEN qty>0 THEN price END desc,
CASE WHEN qty=0 THEN price END asc

答案 4 :(得分:0)

我们可以使用Case语句将两组划分,然后按

排序
 select ID, qty, price from(
 select ID, 
   qty, 
   price, 
   (case when qty > 0 then 1
    else 0 end) as grp
  from table1) T
  order by GRP, price desc

答案 5 :(得分:0)

大多数SQL版本具有 au BufRead,BufNewFile *.xyz set filetype=c au BufRead,BufNewFile *.xyz setfiletype c 函数。因此,如果您不想使用xyz.vim ,并且如果数量绝不为负,则可以执行以下操作:

sign()