Sql 选择“按一列分组”的所有列

Sql 选择“按一列分组”的所有列,sql,postgresql,greatest-n-per-group,Sql,Postgresql,Greatest N Per Group,我有这张桌子: +----+-----+----------+ | id | name| key | +----+-----+----------+ | 1 | foo |111000 | | 2 | bar |111000 | | 3 | foo |000111 | +----+-----+----------+ 有没有办法按键分组以获得此结果 +----+-----+----------+ | id | name| key | +----+---

我有这张桌子:

+----+-----+----------+
| id | name| key      |
+----+-----+----------+
| 1  | foo |111000    |
| 2  | bar |111000    |
| 3  | foo |000111    |
+----+-----+----------+
有没有办法按键分组以获得此结果

+----+-----+----------+
| id | name| key      |
+----+-----+----------+
| 2  | bar |111000    |
| 3  | foo |000111    |
+----+-----+----------+
或者这个结果:

+----+-----+----------+
| id | name| key      |
+----+-----+----------+
| 1  | foo |111000    |
| 3  | foo |000111    |
+----+-----+----------+
如果我使用此查询:

SELECT * FROM sch.mytable GROUP BY(key);
我知道这是不对的,因为我应该按需要显示的所有列进行分组

这个问题有解决办法吗?


请注意,
orderby
子句确定哪一行将赢得平局。

适用于所有DB引擎的查询将是

select t1.*
from sch.mytable t1
join
(
    SELECT min(id) as id
    FROM sch.mytable 
    GROUP BY key
) t2 on t1.id = t2.id

其中
min(id)
是影响您得到的结果的函数。如果您使用
max(id)
则得到另一个。

您需要一个聚合函数来使用group by。你的聚合函数是什么?你需要什么聚合函数?Mean count或min或max或其他任何内容:在本例中,“id”是mytable的“主键”列。(我可能错了,但这是我假设的,查询工作正常)只需注意,
join
与所描述的
internaljoin
是一样的
select t1.*
from sch.mytable t1
join
(
    SELECT min(id) as id
    FROM sch.mytable 
    GROUP BY key
) t2 on t1.id = t2.id