2011-07-08 36 views
2

每個帳戶都與一個人和一種帳戶關聯。我想選擇一個不同的帳戶子集。爲了被選中,賬戶至少滿足兩個標準中的一個。如果一個帳戶發生兩次PostgreSQL:你如何根據WHERE子句選擇DISTINCT關係和按不同字段排序?

我想根據兩個不同的字段來訂購這個結果集。這是我的嘗試:

Select DISTINCT a.* 
FROM people AS p 
JOIN accounts AS a 
ON a.people_id = p.id 
JOIN type_account AS t 
ON t.type_id = a.id 
WHERE t.id IN(1,3,5) 
OR p.id IN(2,4,6) 
ORDER BY(CASE 
     WHEN p.id IN(2,4,6) THEN p.updated_at 
     WHEN t.id IN(1,3,5) THEN p.created_at) AS position 

而且我得到了這個錯誤:SELECT DISTINCT, ORDER BY expressions must appear in select list

如果我移動case語句的選擇有可能爲一個帳戶(與不同的人相關聯的)出現在結果的兩倍,即當第一個where子句被滿足時,一次,第二個where子句滿足時,兩次。在這種情況下,賬戶將在結果集中出現兩次。

我有困難纏繞在這一個頭上。任何幫助,將不勝感激:)

回答

6

移動你的CASE語句(S)到SELECT子句,那麼爲了自己的位置:

SELECT 
    CASE 
     WHEN p.id IN(2,4,6) THEN p.updated_at 
     WHEN t.id IN(1,3,5) THEN p.created_at 
    END AS position, 
    DISTINCT a.* 
FROM people AS p 
JOIN accounts AS a 
ON a.people_id = p.id 
JOIN type_account AS t 
ON t.type_id = a.id 
WHERE t.id IN(1,3,5) 
OR p.id IN(2,4,6) 
ORDER BY 1 DESC 
LIMIT 1; 
+0

但有可能爲一個帳戶(與不同的人相關聯的)出現在結果兩次,即當第一個where子句被滿足時,一次,第二個where子句滿足時,兩次。在這種情況下,賬戶將在結果集中出現兩次。 – Spencer

+0

所以,也許你想要一個子查詢?我很難完全掌握您的需求。 – Flimzy

+0

我的要求是,我只希望結果集中有一個帳戶。 – Spencer

相關問題