SQL ORDER 结果 BY 多个子句

Posted

技术标签:

【中文标题】SQL ORDER 结果 BY 多个子句【英文标题】:SQL ORDER results BY multiple clauses 【发布时间】:2020-05-10 17:30:19 【问题描述】:

大家好,我与 prestashop 合作,并且有这个从不同表中提取数据的长查询将它们连接在一起,并开始如下:

SELECT p.*, product_shop.*, 
       stock.out_of_stock, 
       IFNULL(stock.quantity, 0) as quantity, 
       product_attribute_shop.minimal_quantity AS
      ... etc etc

最后是按名称排序的,并且是有限的(用于分页)

      ORDER BY pl.`name` asc
      LIMIT 0,9

我想添加数量条款,但如果我

    ORDER BY quantity desc, pl.`name` asc
    LIMIT 0,9

结果现在先按数量排序,然后按名称排序。 我想要实现的是也按“数量”订购。但是我需要的只是将数量为0的产品放在最后。

我更好地解释自己:

我想查看所有按名称订购的产品,但数量为 0 的产品,我最后需要它们(当然也按名称订购)。 假设我有 14 种产品:

产品A:752 产品B:0 产品C:1000 产品 D:584 产品E:333 产品 F:264 产品G:0 产品H:6 产品一:0 产品J:994 产品K:0 产品L:2 产品型号:4500 产品编号:7

我需要以某种方式订购,如果我这样做了

LIMIT 0,9 Result is: A,C,D,E,F,H,J,L,M

LIMIT 0,14 Result is: A,C,D,E,F,H,J,L,M,N,B,G,I,K

谢谢

【问题讨论】:

【参考方案1】:

您只想按一个布尔值进行排序——无论值是否为零。在 mysql 中,您可以使用布尔表达式,“1”代表真,“0”代表假:

ORDER BY (quantity = 0),  -- put 0 last
         pl.`name` asc

【讨论】:

是的,它适用于 (quantity = 0),即使不使用 COALESCE。 作为数量 @Carondimonio 。 . .我原本以为你有不同的问题。我推荐使用COALESCE(),因为那是标准的SQL 函数。但是,这与您的问题无关。

以上是关于SQL ORDER 结果 BY 多个子句的主要内容,如果未能解决你的问题,请参考以下文章

Sql order by 和 group BY 如何共同运用?

多个 ORDER BY

如何对包含子句“order by”、“desc”和“Limit”的多个列使用 distinct

SQL Order By 子句详解

SQL-W3School:SQL ORDER BY 子句

05 排序检索数据 - order by