当前位置: 首页 > 面试题库 >

MySQL按两列排序

闾丘成双
2023-03-14
问题内容

我有一个像下面的表格


    CREATE TABLE Products(Product_id INT, ProductName VARCHAR(255), 
                          Featured enum('Yes', 'No'), Priority enum('p1', 'p2', 'p3'))


    INSERT INTO Products(ProductName, Featured, Priority) 
                  VALUES('Product A', 'Yes', 'p1'),
                        ('Product B', 'No',  'p2'),
                        ('Product C', 'Yes', 'p1'),
                        ('Product D', 'No',  'p1'),
                        ('Product E', 'Yes', 'p3'),
                        ('Product F', 'No',  'p2'),
                        ('Product G', 'Yes', 'p1'),
                        ('Product H', 'Yes', 'p2'),
                        ('Product I', 'No',  'p2'),
                        ('Product J', 'Yes', 'p3'),
                        ('Product K', 'Yes', 'p1'),
                        ('Product L', 'No',  'p3');

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

Op:
   ProdName | Featured  | Priority

    Product A   Yes         p1
    Product C   Yes         p1
    Product G   Yes         p1
    Product K   Yes         p1
    Product H   Yes         p2
    Product E   Yes         p3
    Product J   Yes         p3
    Product D   No          p1
    Product B   No          p2
    Product F   No          p2
    Product I   No          p2
    Product L   No          p3

我写了一个查询,在下面是行不通的。

  SELECT * 
    FROM Products
   ORDER BY Featured IN ('Yes') desc,
            Priority IN ('p1', 'p2', 'p3') desc

你能在那发现错误吗


问题答案:

试试这个

Select * from Products ORDER BY Featured, Priority

如果您在mysql枚举上使用ORDER BY,则不会按字母顺序对其进行排序,而是会按其在枚举中的位置对其进行排序。

如果要按照描述的字母顺序排序,请将枚举名称转换为这样的字符串

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


 类似资料:
  • 问题内容: 我有一个数字列表:(这是现有记录的ID) 我有一个带有列和的mysql表,其中是整数主键。我想从该表中选择的记录,但在一个特定的顺序,例如,,,,,。 是否可以在MyISAM的查询中执行此操作,而无需任何后处理? 最简单的方法是什么? 问题答案: 由于,一个简单就足够了。 但是,如果您要这样订购:,则可以使用function : 如果查询匹配的行多于您列出的行 返回时,行不匹配任何您列

  • 问题内容: 我将要有一个固定的项目清单,直到有一个随机化步骤,我才能运行查询直到执行该查询为止。 我想要以下内容: 假设is_launch_set将返回1,3,7,11,但已被随机分配到以下位置: 关于如何实现这一目标的任何想法?我在想也许是一个find_in_set,但不是很确定。 问题答案: 您可以使用以下任一方法来做到这一点: 要么 要么

  • 问题内容: 好的,所以我试图在多列中进行全文搜索,就像这样简单: 现在,我想按相关性排序(找到了多少个单词?),我已经可以使用以下方式进行处理: 现在这是我迷路的部分,我想在此列中优先考虑相关性。 我想我可以创建两个相关性列,一个用于,一个用于,但是到那时我将在表中进行三遍相同的搜索,而对于我正在执行的此功能,性能非常重要,因为查询将被联接并与其他表匹配。 因此,我的主要问题是 ,是否有更快的方法

  • 问题内容: 建立库存系统。我有很多产品,每个产品都有三个不同的变量。因此,对于总库存,我想按两列(产品和尺寸)和总数量分组以获得总库存。 我想要输出的内容: 小部件一-2:375 小部件二-3:150 小部件二-2:150 我想出了如何使用以下代码将一列分组并求和: 我只是按两列分组。可能吗?还是应该仅针对这三种尺寸的商品创建三种不同的产品并删除该列?谢谢。 问题答案: 根据示例表,您似乎希望分组

  • 问题内容: 是否可以按某个列以及RAND()对结果集进行排序? 例如: 谢谢你。 问题答案: 您正在执行的操作是有效的-它将按降序对结果进行排序,但会随机化领带的顺序。 但是,要执行所需的操作,您首先需要使用子查询来获取最新的100条记录,然后再使用外部查询对该子查询的结果进行随机排序: