2016-04-28 162 views
0

一列不同的選擇記錄,我得到了以下的記錄,其中不同的人有同一個名字:在PostgreSQL數據庫

id name category_id birthdate family_id 
1 joe 2    2014-05-01 1 
2 jack 3    2013-04-01 2 
3 joe 2    1964-05-01 1 
4 jack 5    1982-05-01 2 
5 emma 1    2014-05-01 1 
6 joe 3    2003-07-06 3 

現在我需要查詢其結果如下。每個family_id我只想要每個名字一次。我需要包含id後的每條記錄的所有值。如果桌子在路上走得更遠,我也需要它們。所以結果應該包括所有的值。

id name category_id birthdate family_id 
1 joe 2    2014-05-01 1 
2 jack 3    2013-04-01 2 
5 emma 1    2014-05-01 1 
6 joe 3    2003-07-06 3 

我用幾種方法(GROUP BYDISTINCTDISTINCT ON等),但沒有被工作了,我試了一下。

當我使用GROUP BY子句(GROUP BY name)時,我得到一個ERROR: column "deals.id" must appear in the GROUP BY clause or be used in an aggregate function。但是當我把id放在條款裏面時,我把所有的記錄都拿回來了。

與不同。在那裏,我必須選擇結果集應該不同的所有字段。但我需要記錄的所有值。並且由於主要每個記錄都是不同的,當我包含id。

我試着用一個已經過濾了所有不同名字的子語句。我在where子句中使用它們。但是我得到了所有的價值,包括(當然)不明確的名稱/ family_id記錄。

有沒有人幫助我?

+1

「*沒有爲我工作*」不是一個可接受的問題描述。告訴我們你已經嘗試了什麼以及你得到的錯誤。 –

+1

您需要描述如何爲每個family_id選擇一次該名稱。 – jarlh

+0

@a_horse_with_no_name你能告訴我如何把一個表放入堆棧溢出?我用markdown試了一下,用html表和一個簡單的文本表(http://www.sensefulsolutions.com/2010/10/format-text-as-table.html)。沒有工作。所以我認爲這比沒有好。 – coderuby

回答

1

如果您包含id,您可能不會指定組中的所有字段,那麼這將使行具有唯一性。

嘗試類似:

SELECT 
    name, category_id, birthdate, family_id 
FROM family 
GROUP BY 
    name, category_id, birthdate, family_id; 
+0

與'SELECT DISTINCT'相同,不會解決OP的問題。 (所有的生日都是獨一無二的。) – jarlh

+0

但coderuby想要輸出 –

+0

@a_horse_with_no_name中的'id'列,那麼他會喜歡哪個ID?因爲每次查詢運行時可能會有所不同,具體取決於DBE如何評估事物。 –

0

它曾與DISTINCT ON

下相當奏效:

SELECT DISTINCT ON (table.name, table.family_id) table.* FROM table; 

我要檢查的唯一事情是排序。但我想分享我的解決方案到目前爲止。