2013-10-22 83 views
2

我想:如果按降序排列是不是null,则为了通过升序排列,否则,为了通过B,所以我写:在一个顺序条件递增或递减byexpression

select a, b from table order by ifnull(a asc, b desc); 

但MySQL的抱怨语法错误

有什么建议吗?

+0

对不起,这说不通。假设你的a/b对是1/2,3/1,NULL/2。那么NULL/2应该是哪里?你的订单是a = 1,到目前为止a = 3(升序),然后你想插入b = 2递减?你的意思是别的。正如斯奈德所建议的那样,例如按顺序排序然后按b排序。请澄清您的请求。 –

回答

0

你真的不需要这里的IF语句。如果列“a”为空,那么它将不会影响基于列“b”排序结果的方式。

SELECT a, b 
FROM table 
ORDER BY a asc, b desc; 
0

你为什么不只是跳过ifnull这样的:

select a, b from test order by a asc, b desc 

这里是SQLFiddle

如果你想order by只有当aNULL值和离开秩序作为其时aNON NULL,那么你可以做到以下几点:

select a, b from test order by a asc, 
case when a IS NULL THEN b ELSE 0 END desc 

这里是SQLFiddle,你可以在这个小提琴中看到sql留下的订单,因为它是aNON NULL值,它只在aNULL值时才会命令它们。