首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >按销售降序对部件进行排序,并在最后显示没有图像和参数的部件

按销售降序对部件进行排序,并在最后显示没有图像和参数的部件
EN

Stack Overflow用户
提问于 2019-11-09 22:52:15
回答 2查看 39关注 0票数 0

我需要首先显示按销售排序的零件(列名为sales_rotation_group),并显示在末尾没有图像和参数的零件。换句话说,首先显示具有图像和参数的部分,然后显示没有图像和参数的部分

让我们假设db结构如下:

零件

id (字符串)、sales_rotation_group (字符串)、parameters_count (整数)

美术馆

id (整数) part_id (整数)

图片

id (整数),galery_id (整数)

目前我有这个SQL,但是它不能正确地对各个部分进行排序。它显示了一些带有图像的零件和几个带有参数的零件,然后是没有参数的零件,然后是带有参数的零件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT  parts.* FROM parts
LEFT OUTER JOIN galleries
ON galleries.part_id = parts.id
LEFT OUTER JOIN images ON images.gallery_id = galleries.id
GROUP BY parts.id
ORDER BY parts.sale_rotation_group DESC, COUNT(images.id) DESC, parts.parameters_count DESC

我应该以某种方式使用分组吗?我想我可能会遇到这样的问题,一个零件可能有很好的销售(在查询结果的顶部),并且没有图像或参数。

EN

回答 2

Stack Overflow用户

发布于 2019-11-09 23:00:01

您可以更改ORDER BY子句,以便根据计数是否大于0而不是实际计数值进行排序。这将确保具有0个图像和0个参数的零件在末尾排序:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
ORDER BY CASE WHEN COUNT(images.id) > 0 THEN 0 ELSE 1 END,
         CASE WHEN parts.parameters_count > 0 THEN 0 ELSE 1 END,
         parts.sale_rotation_group DESC

注意,使用UNION不会有什么帮助,因为UNION查询的输出顺序是未定义的,并且您仍然需要ORDER BY子句。

票数 1
EN

Stack Overflow用户

发布于 2019-11-09 23:05:28

您可以使用ORDER BY中的窗口函数来完成所需的操作:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
SELECT p.*
FROM parts p LEFT OUTER JOIN
     galleries g
     ON g.part_id = p.id LEFT OUTER JOIN
     images i
     ON i.gallery_id = g.id
GROUP BY p.id
ORDER BY COUNT(i.id) OVER (PARTITION BY p.id) DESC,
         p.parameters_count DESC;

您可以包含p.sale_rotation_group作为第一个键。但是,这不是您对所需排序的描述的一部分。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58784253

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文