在“中使用复杂表达式”;“订购”;在Mysql中
我有一张桌子“成交” 我想归档以下订单: 1) 底部的过期交易 2) 交易id高于顶部5的交易,按交易id排序 3) 处理RAND与seed订购的底部id低于/等于5的交易在“中使用复杂表达式”;“订购”;在Mysql中,mysql,sql-order-by,Mysql,Sql Order By,我有一张桌子“成交” 我想归档以下订单: 1) 底部的过期交易 2) 交易id高于顶部5的交易,按交易id排序 3) 处理RAND与seed订购的底部id低于/等于5的交易 选择交易id,按expired=1从交易订单中过期,交易id
选择交易id,按expired=1从交易订单中过期,交易id<5,rand(1)desc 这个查询是错误的,因为表的顶部也将按兰德公司排序,而我想按deal_id desc排序的顶部部分
这是它应该如何照顾的:
+---------+---------+
| deal_id | expired |
+---------+---------+
| 10| 0 | top part ordered by
| 9 | 0 | deal_id desc
| 6 |_______0 | if ( deal_id < 5 AND expired = 0 )
| 4 | 0 |
| 1 | 0 | bottom part ordered
| 5 | 0 | by rand(seed)
| 7 | 0 | expired = 1 at the bottom
| 5 | 1 |
| 7 | 1 |
| 8 | 1 |
+---------+---------+
+---------+---------+
|交易id已过期|
+---------+---------+
|10 | 0 |顶部零件由订购
|9 | 0 |交易id描述
|6 |如果|如果|如果|交易id<5且过期=0)
| 4 | 0 |
|订购1 | 0 |底部零件
|兰特5 | 0 |(种子)
|7 | 0 |过期=底部1
| 5 | 1 |
| 7 | 1 |
| 8 | 1 |
+---------+---------+
是否可以通过在“orderby”中仅使用表达式来存档我知道我可以使用UNION,但我真的不想,它可以让我的框架保持简单
谢谢。您可以使用案例陈述
ORDER BY CASE
WHEN expired = 1 THEN 99
WHEN deal_id < 5 THEN deal_id
WHEN deal_id > 5 THEN Rand() + 5 //so that the value is between 5 and 6
ELSE 100 END
按案例排序
过期时=1,则为99
当交易id<5时,则交易id
当deal_id>5时,则Rand()+5//使该值介于5和6之间
否则100结束
像这样的东西
SELECT
deal_id,
expired
FROM
Deal
ORDER BY
expired = 1,
deal_id < 5,
case when (expired=1 or deal_id<5)=false
then deal_id
else rand()
end desc
选择
交易id,
期满
从…起
处理
订购人
过期=1,
交易id<5,
case-when(expired=1或deal_id谢谢,但现在工作正常。无论如何,我不知道mysql中的case,干杯。太棒了,现在看起来很简单:)和SQLfiddle看起来很棒,每天都有新的东西。谢谢
SELECT
deal_id,
expired
FROM
Deal
ORDER BY
expired = 1,
deal_id < 5,
case when (expired=1 or deal_id<5)=false
then deal_id
else rand()
end desc