Sql 选择具有随机id的不同名称

Sql 选择具有随机id的不同名称,sql,postgresql,distinct,Sql,Postgresql,Distinct,我有一个带有id和名称的表(一堆与此查询无关的其他内容)。现在,我需要一个SQL语句,它为每个不同的名称返回一行,在该行中,我需要名称和一个id(可以是任何id) 桌子看起来像这样: id | name ---+----- 1 | a2 2 | a2 3 | a4 4 | a4 5 | a2 6 | a3 顺便说一句,使用Postgres 8.4 尝试了各种组合的分组或加入自我。在不创建额外表的情况下也可以这样做吗?任意选择返回每个名称的最小id SELECT name, MIN(

我有一个带有id和名称的表(一堆与此查询无关的其他内容)。现在,我需要一个SQL语句,它为每个不同的名称返回一行,在该行中,我需要名称和一个id(可以是任何id)

桌子看起来像这样:

id | name
---+-----
 1 | a2
 2 | a2
 3 | a4
 4 | a4
 5 | a2
 6 | a3
顺便说一句,使用Postgres 8.4


尝试了各种组合的分组或加入自我。在不创建额外表的情况下也可以这样做吗?

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

SELECT name, MIN(id)
    FROM YourTable
    GROUP BY name
你可以看看。它显示了如何选择随机行

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

SELECT id FROM mytable ORDER BY random()
然后,您可以使用
groupby
选择不同的名称。您可能需要使用
limit
子句限制结果。因此,查询如下所示:

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

id也必须是不同的,或者同一个id可以出现多次?id是主键,所以不能出现多次。谢谢,group by总是要求我按我选择的所有属性进行分组。我不知道,attribs上的funktions不是这样。使用
LIMIT 1
意味着您只能返回一行,而不是OP要求的每个名称返回一行。
select ID, name from table group by name;