我有一个ID和一个名称(一堆其他东西与此查询不相关)的表。现在我需要一个SQL语句,它为每个不同的名称返回一行,并在该行中我需要名称和一个id(可以是任何id)。使用随机ID选择不同的名称
该表看起来像这样:
id | name
---+-----
1 | a2
2 | a2
3 | a4
4 | a4
5 | a2
6 | a3
BTW。使用Postgres 8.4
尝试了分组或自我加入的各种组合。这甚至可以不创建额外的表?
我有一个ID和一个名称(一堆其他东西与此查询不相关)的表。现在我需要一个SQL语句,它为每个不同的名称返回一行,并在该行中我需要名称和一个id(可以是任何id)。使用随机ID选择不同的名称
该表看起来像这样:
id | name
---+-----
1 | a2
2 | a2
3 | a4
4 | a4
5 | a2
6 | a3
BTW。使用Postgres 8.4
尝试了分组或自我加入的各种组合。这甚至可以不创建额外的表?
任意选择返回每个名称的最小id。
SELECT name, MIN(id)
FROM YourTable
GROUP BY name
ahh非常感谢,group by总是要求我按照我选择的所有属性进行分组。不知道,这是不是在attribs funktions的情况。 – Max
你可以看看PostgreSQL wiki。它显示如何选择随机行。
您可以使用random()
函数使用SELECT
的ORDER 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
使用'LIMIT 1'意味着你只能得到一行返回,而不是OP所要求的每行一行。 –
select ID, name from table group by name;
必须的ID也是不同的,或者可以在同一个ID多次出现? –
id是主键,所以不能多次出现 – Max