1

我需要进行查询,以显示组织顺序按组织排名递减的顺序。但是,如果组织有当前正在发生的事件,它们将显示在顶部(按排名排序)然后显示即将发生事件的组织,最后显示没有发生任何事情的组织。

一个组织可以同时拥有当前正在发生和即将发生的事件,并且每个事件都有多个,但它只选择一个事件,并且该组织只出现在类别下

当前发生的优先级高于即将发生的事件,因此该组织仅在同时具有当前发生的事件和即将发生的事件时才会出现在当前发生的事件中

这是输出应该是什么的示例

目前正在发生

  • 组织 1(等级 3)- 事件 1
  • 组织 2(等级 2) - Event2
  • 组织 3(等级 1) - Event3

即将到来

  • 组织 5(等级 3) - Event4
  • 组织 4(等级 2) - Event5
  • 组织 6(等级 2) - Event6

没有

  • 组织 7(等级 3) - Event7
  • 组织 8(等级 2) - Event8
  • 组织 9(等级 2) - Event9

这是一个示例表设置

组织 id - 名称 - 等级

事件 ID - 组织 ID - 名称 - 状态(2 = 当前正在发生,1 = 即将发生,0 = 没有)

正如我所说,状态列仅包含 2、1 或 0,我相信这可以执行 ORDER BY

如果有人可以写一个示例查询,我将不胜感激!我无法按状态对事件进行排序,然后同时按它们的等级对这些事件的组织进行排序。

4

1 回答 1

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 开始有效。

于 2012-08-27T22:34:00.017 回答