【问题标题】:Order rows by product category name按产品类别名称排序行
【发布时间】:2019-11-25 04:08:30
【问题描述】:

我的客户希望我按不同类别订购不同的产品,例如当类别名称为“alternator”时,我应该首先显示生产商为“ABC”的零件,当类别名称为“starter”时,我应该首先显示生产者为“DEF”的零件,否则按 images_count 和 parameters_count 排序。我的架构如下所示。

零件(id、producer_id、category_id) 类别(ID,名称) 生产者(id,名称)

我已经尝试通过 ORDER BY 中的结果排序,就像这样。

SELECT *
FROM   parts 
       JOIN categories 
         ON parts.category_id = categories.id 
       JOIN producers 
         ON parts.producer_id = Cast(producers.lauber_id AS INT) 
ORDER  BY CASE 
            WHEN categories.NAME = 'alternator' 
                  OR categories.NAME = 'starter' THEN 
            producers.NAME = 'STARDAX' 
             OR producers.NAME = 'POWERTRUCK' 
          END DESC, 
          CASE 
            WHEN categories.NAME = 'something else' THEN 
            producers.NAME = 'POINTGEAR' 
             OR producers.NAME = 'LAUBER' 
          END DESC, 
          images_count DESC, 
          parameters_count DESC 

我不确定我这样做是否正确,我不是 SQL 高手。我正在使用 Postgres。

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    你可以使用CASE:

    SELECT *
    FROM   parts 
           JOIN categories 
             ON parts.category_id = categories.id 
           JOIN producers 
             ON parts.producer_id = Cast(producers.lauber_id AS INT) 
    ORDER  BY CASE WHEN categories.NAME = 'alternator' AND producers.NAME = 'ABC' THEN 0
                   WHEN categories.NAME = 'starter' AND producers.NAME = 'DEF' THEN 0
                   -- ...
                   ELSE 1
              END,
              images_count DESC, 
              parameters_count DESC 
    

    【讨论】:

    • 非常感谢,我忘了我可以在CASE WHEN 中做THEN 0。它按预期工作,您的回答非常有帮助。谢谢!
    • 当类别为交流发电机或起动机且生产者名称为 ABC 时,我如何通过 images_count 和 parameters_count 对结果进行排序。我想显示生产者为 ABC 且顶部有图像和参数的部件。
    猜你喜欢
    • 2013-10-06
    • 2015-12-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-08
    相关资源
    最近更新 更多