我需要进行一个查询,显示组织顺序按组织等级递减。 但是,如果组织有当前正在发生的事件,它们将显示在顶部(按等级排序) 然后显示即将举办事件的组织 最后显示没有发生任何事情的组织。
一个组织可以同时拥有当前发生的事件和即将发生的事件,并且每个事件都有多个,但它只选择一个事件并且该组织只出现在类别下
当前发生的事件优先于即将发生的事件,因此组织只有在同时具有当前发生的事件和即将发生的事件时才会出现在当前发生的事件中
这是一个输出应该是什么的例子
当前正在发生
- 组织 1(等级 3)- 事件 1
- 组织 2(等级 2)- 事件 2
- 组织 3(等级 1)- 事件 3
即将推出
- 组织 5(等级 3)- 事件 4
- 组织 4(等级 2)- 事件 5
- 组织 6(等级 2)- 事件 6
没有
- 组织 7(等级 3)- 事件 7
- 组织 8(等级 2)- 事件 8
- 组织 9(等级 2)- 事件 9
这是一个示例表设置
组织 id - 名字 - 排名
事件 id - organization_id - 名称 - 状态(2 = 当前正在发生,1 = 即将发生,0 = 无)
正如我所说,状态列仅包含 2、1 或 0,我相信这使得执行 ORDER BY 成为可能
如果有人能写一个示例查询,我将不胜感激!我无法按状态对事件进行排序,然后同时按级别对这些事件的组织进行排序。
最佳答案
例子:
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 开始有效。
关于sql - 在一个查询中实现多个排序和限制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12150275/