2011-12-09 42 views
2

我有一个ID和一个名称(一堆其他东西与此查询不相关)的表。现在我需要一个SQL语句,它为每个不同的名称返回一行,并在该行中我需要名称和一个id(可以是任何id)。使用随机ID选择不同的名称

该表看起来像这样:

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

BTW。使用Postgres 8.4

尝试了分组或自我加入的各种组合。这甚至可以不创建额外的表?

+0

必须的ID也是不同的,或者可以在同一个ID多次出现? –

+0

id是主键,所以不能多次出现 – Max

回答

4

任意选择返回每个名称的最小id。

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

ahh非常感谢,group by总是要求我按照我选择的所有属性进行分组。不知道,这是不是在attribs funktions的情况。 – Max

0

你可以看看PostgreSQL wiki。它显示如何选择随机行。

您可以使用random()函数使用SELECTORDER BY子句选择随机行。例如:

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'意味着你只能得到一行返回,而不是OP所要求的每行一行。 –

0
select ID, name from table group by name;