2012-08-27 48 views
1

我需要進行查詢,顯示按組織排名順序遞減的組織順序。 但是,如果組織有一個當前正在發生的事件,它們顯示在頂部(按排名排序) 然後顯示即將舉辦活動的組織 最後顯示沒有任何事情發生的組織。在一個查詢中實現多個排序和限制

一個組織可以有兩種目前發生和即將發生的事件,並有各自的整數倍,但它只能選擇一個事件,該組織僅在出現在類別

目前發生的是在即將到來的當務之急,所以組織只出現在當前發生的事情,如果它既有目前發生和即將發生的事件

這裏是輸出應該是什麼

目前破天

爲例
  • 組織1(等級3) - 事件1
  • 組織2(等級2) - 事件2
  • 組織3(等級1) - EVENT3

待辦

  • 組織5(等級3) - 活動4
  • 組織4(等級2) - 活動5
  • 組織6(等級2) - Event6

沒什麼

  • 組織7(等級3) - Event7
  • 組織8(等級2) - Event8
  • 組織9 (等級2) - 事件9

這是一個示例選項卡樂建立

組織 ID - 姓名 - 等級

活動 ID - 的organization_ID - 名稱 - 狀態(2 =目前發生的事情,1 =即將到來,0 =無)

狀態欄只包含2,1或0,正如我所說的,我相信可以做一個ORDER BY

如果有人可以寫一個示例查詢,我將不勝感激!按照狀態排列事件,然後按照排名同時排序這些事件的組織,我很難。

回答

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_idorganization作爲主鍵,因爲它是一種反圖案在整個數據庫的多個表以使用非描述性名稱id

o.organization_id是主鍵的事實也允許我只有GROUP BY o.organization_id - 這從PostgreSQL 9.1開始工作。

+0

輝煌。謝謝! – Irlanco