Select 所有列 GROUP BY 一列
Select all columns with GROUP BY one column
我有这个table:
+----+-----+----------+
| 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);
这不正确我知道,因为我应该按我需要显示的所有列分组。
这个问题有解决办法吗?
select distinct on (key) *
from t
order by key, name
请注意,order by
子句确定哪一行将赢得平局。
适用于所有数据库引擎的查询是
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)
你会得到另一个。
我有这个table:
+----+-----+----------+
| 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);
这不正确我知道,因为我应该按我需要显示的所有列分组。
这个问题有解决办法吗?
select distinct on (key) *
from t
order by key, name
请注意,order by
子句确定哪一行将赢得平局。
适用于所有数据库引擎的查询是
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)
你会得到另一个。