我需要创建一个查询,显示按组织排名顺序减少的组织顺序。 但是,如果组织有一个当前正在发生的事件,它们将显示在顶部(按排名排序) 然后显示即将举办的活动的组织 最后,显示没有发生任何事情的组织。
组织可以同时拥有当前正在发生的事件和即将发生的事件,并且每个事件都有多个,但它只选择一个事件,而组织只显示在类别
下目前正在发生的事情优先于未来,因此只有当前正在发生和即将发生的事件时,该组织才会出现在当前正在发生的事件
以下是输出应该是
的示例目前正在发生
待办
没有
以下是一个示例表设置
组织 id - name - rank
活动 id - organization_id - name - status(2 =当前正在发生,1 =即将发生,0 =什么都没有)
状态栏只包含2,1或0,正如我所说,我认为可以进行ORDER BY
如果有人可以编写示例查询,我将非常感谢!我在按状态排序事件时遇到问题,然后按照他们的排名同时对这些事件的组织进行排序。
答案 0 :(得分:1)
示例:
SELECT o.*, max(e.status) AS org_status
FROM organization o
JOIN event e ON e.organiszation_id = o.organization_id
GROUP BY o.organization_id
ORDER BY org_status DESC, o.rank DESC, o.name;
请注意,我使用organization_id
作为organization
的主键,因为在整个数据库的多个表中使用非描述性名称id
是一种反模式。
o.organization_id
是主键的事实也让我只能GROUP BY o.organization_id
- 这可以从PostgreSQL 9.1开始。