Sql 按产品类别名称订购行
我的客户希望我按不同类别订购不同的产品,例如,当类别名称为“交流发电机”时,我应首先显示生产商为“ABC”的零件,当类别名称为“起动机”时,我应首先显示生产商为“DEF”的零件,否则按图像计数和参数计数订购。我的模式如下所示 零件(id、生产商id、类别id) 类别(id、名称) 制作人(id、姓名) 我试着按顺序排列结果,就像这样Sql 按产品类别名称订购行,sql,postgresql,Sql,Postgresql,我的客户希望我按不同类别订购不同的产品,例如,当类别名称为“交流发电机”时,我应首先显示生产商为“ABC”的零件,当类别名称为“起动机”时,我应首先显示生产商为“DEF”的零件,否则按图像计数和参数计数订购。我的模式如下所示 零件(id、生产商id、类别id) 类别(id、名称) 制作人(id、姓名) 我试着按顺序排列结果,就像这样 SELECT * FROM parts JOIN categories ON parts.category_id = cat
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。您可以使用
案例
:
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
太多了,我忘了在
的情况下我可以做然后0
。正如预期的那样,你的回答很有帮助。非常感谢。当类别为交流发电机或起动机且生产商名称为ABC时,我如何根据图像计数和参数计数对结果进行排序。我想展示生产商是ABC的零件,它们的顶部有图像和参数。