Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按两个子句排序(降序和升序)_Mysql_Sql_Sql Order By - Fatal编程技术网

MySQL按两个子句排序(降序和升序)

MySQL按两个子句排序(降序和升序),mysql,sql,sql-order-by,Mysql,Sql,Sql Order By,我有这张桌子: 创建表productsname文本,数量int; 在产品中插入值A、10; 在产品中插入值B,0; 在产品中插入值C,15; 在产品中插入值D,0; 在产品中插入值E、17; 我想按产品名称订购,但在底部保留数量为0的产品,如下所示: name quantity A 10 C 15 E 17 B 0 D 0 SELECT * FROM ( select name, quantity from products W

我有这张桌子:

创建表productsname文本,数量int; 在产品中插入值A、10; 在产品中插入值B,0; 在产品中插入值C,15; 在产品中插入值D,0; 在产品中插入值E、17; 我想按产品名称订购,但在底部保留数量为0的产品,如下所示:

name    quantity
A       10
C       15
E       17
B       0
D       0
SELECT * FROM (
select name, quantity from products WHERE quantity>0 order by name) t1
UNION
select name, quantity from products t2 WHERE quantity<=0;
我试过: 按数量说明从产品订单中选择*名称asc;但是,虽然它正确地将quantity=0保留在底部,但名称顺序是相反的。在这种情况下,ORDER BY是正确的吗

SQL Fiddle:

尝试以下操作:

select * from products 
order by case when quantity = 0 then "z" else name end asc;
我将使用:

order by (quantity = 0), name
布尔值按先假后真的顺序排列


我想用它来表示,而不是使用特殊的值,例如“z”-如果名称以“z”开头,它甚至不起作用。

您可以这样尝试:

name    quantity
A       10
C       15
E       17
B       0
D       0
SELECT * FROM (
select name, quantity from products WHERE quantity>0 order by name) t1
UNION
select name, quantity from products t2 WHERE quantity<=0;

. . 如果您希望名称以z开头,例如“zip”,则此操作无效。很好,就像您使用我的句柄证明它的方式:-它将返回什么类型的错误?在作者提供的网站上查看一下,一切正常。在工会之前,你已经收到了订单。在您发送的SQLFIDLE中,没有使用union关键字。