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