【问题标题】:MySQL Order by Two ColumnsMySQL 按两列排序
【发布时间】:2012-10-19 10:49:29
【问题描述】:

我有一张像下面这样的表

CREATE TABLE Products(Product_id INT, ProductName VARCHAR(255), 精选枚举('Yes', 'No'), 优先枚举('p1', 'p2', 'p3')) 插入产品(产品名称、特色、优先级) VALUES('产品 A', '是', 'p1'), ('产品 B','否','p2'), ('产品 C', '是', 'p1'), ('产品 D','否','p1'), ('产品 E','是','p3'), ('产品 F','否','p2'), ('产品 G','是','p1'), ('产品 H','是','p2'), ('产品 I','否','p2'), ('产品 J','是','p3'), ('产品 K', '是', 'p1'), (“产品 L”、“否”、“p3”);

我需要获得特色产品,然后是优先级为 p1、p2 和 p3 的产品

操作: 产品名称 |精选 |优先 产品 A 是 p1 产品 C 是 p1 产品 G 是 p1 产品 K 是 p1 产品 H 是 p2 产品 E 是 p3 产品 J 是 p3 产品 D 编号 p1 产品 B 没有 p2 产品 F 编号 p2 产品 I 无 p2 产品 L No p3

我在下面写了一个不工作的查询..

选择 * 来自产品 ORDER BY Featured IN ('Yes') desc, 优先级 IN ('p1', 'p2', 'p3') desc

你能找出其中的错误吗

【问题讨论】:

  • 您看到了什么错误?您编写的声明应该有效,Yogendra Singh 推荐的简化声明也应该有效。您是否仅选择 Product_id 列?在您的示例中,它将全部为 NULL。

标签: mysql sql database


【解决方案1】:

试试这个

Select * from Products ORDER BY Featured, Priority

如果您在 mysql 枚举上使用 ORDER BY,它不会按字母顺序排序,但会按其在枚举中的位置排序。

如果您想按照描述的字母顺序排列枚举名称 像这样的字符串

Select * from Products ORDER BY  concat(Featured) desc , Priority 

【讨论】:

    【解决方案2】:

    你为什么不简单地使用 SQL 作为:

     SELECT * 
     FROM Products
      ORDER BY Featured desc,
            Priority asc;
    

    通过这样做Yes 将出现在No 之前。 P1 将出现在 P2 之前,P2 将出现在 P3 之前。我相信,这就是你想要的。

    如果数据类型在排序中出现问题,则

     SELECT * 
     FROM Products
      ORDER BY CONCAT(Featured) desc,
            CONCAT(Priority) asc;
    

    【讨论】:

      【解决方案3】:

      检查这个查询--

       SELECT * 
       FROM Products
        ORDER BY Featured asc,Priority,ProductName asc;
      

      Fiddle

      工作代码检查小提琴

      【讨论】:

        【解决方案4】:
        SELECT * 
            FROM Products
        where Featured IN ('Yes') and
              Priority IN ('p1', 'p2', 'p3')
        Order by Featured asc,Priority,ProductName asc;
        

        这应该可以工作

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2010-10-05
          • 1970-01-01
          • 2015-12-27
          • 2012-02-05
          • 2023-03-22
          相关资源
          最近更新 更多