2015-10-10 59 views
0

例如,假設你有一個名爲表,結構如下:獲取PostgreSQL中唯一字段集合的最佳方法?

Table "public.person" 
     Column  |  Type  |      Modifiers      
-------------------+-------------------+----------------------------------------------------- 
id    | integer   | not null default nextval('person_id_seq'::regclass) 
first_name  | character varying | not null 
last_name   | character varying | not null 
birthday   | date    | 
Indexes: 
    "person_pkey" PRIMARY KEY, btree (id) 

你如何找到一套獨特的名字嗎?

通過「一套獨特的」我的意思是這樣的:

Aaron 
    Abbie 
    Adam 
    ... 

而不是這樣的:

Aaron 
    Aaron 
    Abbie 
    Abbie 
    Abbie 
    Adam 
    ... 

我的問題是非常相似this one,但我覺得這個問題是相當具體到特定的人的用例,也沒有得到很多答案 - 所以我想在這裏重新打開這個話題。

我的直覺是使用此查詢:

SELECT DISTINCT ON (first_name) first_name FROM person ORDER BY first_name; 
+0

你能鏈接到一個[SQLFiddle](http://sqlfiddle.com/)來重現問題嗎?當我嘗試在我自己的數據庫上進行復制時,查詢完美無缺。 – Mureinik

+1

你不需要'明顯的()'普通'distinct'足夠'從人選擇不同的FIRST_NAME;' –

+0

@Mureinik我一直無法重現在SQLFiddle問題。我的數據庫可能存在更深層次的問題......運行'SELECT * FROM person ORDER BY first_name'會返回多個名爲Abbie的人的結果,例如** Abbie Smith **,** Abbie Jones **,但是'SELECT * FROM person WHERE first_name ='Abbie''只返回** Abbie Smith的一個結果** ...這可能需要一個新的問題。 – Normangorman

回答

2

如果你想消除重複行做:

SELECT DISTINCT FIRST_NAME FROM PERSON; 

或者,如果你想要聚合某些字段:

SELECT FIRST_NAME, COUNT(1) CNT FROM PERSON GROUP BY FIRST_NAME; 
相關問題