选择所有具有 GROUP BY 一列的列[重复]
Posted
技术标签:
【中文标题】选择所有具有 GROUP BY 一列的列[重复]【英文标题】:Select all columns with GROUP BY one column [duplicate] 【发布时间】:2017-02-10 11:32:40 【问题描述】:我有这张桌子:
+----+-----+----------+
| id | name| key |
+----+-----+----------+
| 1 | foo |111000 |
| 2 | bar |111000 |
| 3 | foo |000111 |
+----+-----+----------+
有没有办法按key分组来得到这个结果?
+----+-----+----------+
| 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);
我知道这是不正确的,因为我应该按需要显示的所有列进行分组。
这个问题有解决办法吗?
【问题讨论】:
您需要一个聚合函数才能使用分组依据。你的聚合函数是什么? 你需要什么聚合函数?平均计数或最小值或最大值或其他任何值 【参考方案1】:适用于所有数据库引擎的查询是
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)
,你会得到另一个。
【讨论】:
对于其他人:在此示例中,“id”是 mytable 的“主键”列。 (我可能错了,但这就是我的假设并且查询工作正常) 请注意,join
与 inner join
所描绘的 here 相同【参考方案2】:
distinct on
select distinct on (key) *
from t
order by key, name
请注意,order by
子句决定了哪一行将赢得平局。
【讨论】:
以上是关于选择所有具有 GROUP BY 一列的列[重复]的主要内容,如果未能解决你的问题,请参考以下文章
不在 GROUP BY 中,包含 DAY、MONTH、YEAR [重复]
Bigquery:选择具有不在group by子句中的任何值的列
我们如何在具有GROUP BY子句的查询中选择非聚合列,而GROUP BY子句在功能上不依赖于GROUP BY子句中的列?