2011-12-09 6 views
2

私はIDと名前を持つテーブルを持っています(このクエリには関係のない他のもの)。今私は別の名前ごとに1つの行を返すSQL文が必要とその行で私は名前と1つのID(任意のIDが可能)が必要です。ところでランダムIDで別名を選択

id | name 
---+----- 
1 | a2 
2 | a2 
3 | a4 
4 | a4 
5 | a2 
6 | a3 

表には、このような何かを探しています。 Postgresを使用して8.4

自己へのグループ化または結合のさまざまな組み合わせを試みました。余分なテーブルを作成しなくてもこれは可能ですか?

+0

をIDも明瞭でなければならない、または同じIDが複数回表示されることができますか? –

+0

idはプライマリキーなので、何度も表示されません – Max

答えて

4

名前ごとに最小IDを返すことを任意に選択します。

SELECT name, MIN(id) 
    FROM YourTable 
    GROUP BY name 
+0

ああ、ありがとう、私は選択していたすべての属性でグループ化するように常に頼んでいました。 didntは知っている、これは帰属に関するfunktionsのケースではない。 – Max

0

PostgreSQL wikiをご覧ください。ランダムな行を選択する方法を示します。

random()関数を使用して、ORDER BY節のSELECTを使用してランダムな行を選択することができます。例:

SELECT id FROM mytable ORDER BY random() 

次に、別の名前を選択するのにGROUP BYを使用できます。 LIMIT句を使用して結果を制限する必要があるかもしれません。だから、クエリは、このようなものになります。

SELECT id, name FROM table_name GROUP BY name ORDER BY random() LIMIT 1 
+1

'LIMIT 1 'を使用すると、返される行は1つだけになります。OPが求めている名前は1行ではありません。 –

0
select ID, name from table group by name;