我试图从一个列中选择最大值,同时按具有多个重复值的另一个非唯一id列进行分组。原始数据库如下所示:
mukey | comppct_r | name | type 65789 | 20 | a | 7n 65789 | 15 | b | 8m 65789 | 1 | c | 1o 65790 | 10 | a | 7n 65790 | 26 | b | 8m 65790 | 5 | c | 1o ...
使用以下方法可以很好地工作:
SELECT c.mukey, Max(c.comppct_r) AS ComponentPercent FROM c GROUP BY c.mukey;
它返回一个像这样的表:
mukey | ComponentPercent 65789 | 20 65790 | 26 65791 | 50 65792 | 90
我希望能够在不影响GROUP BY函数的情况下添加其他列,以将诸如name和type之类的列包括到输出表中,例如:
mukey | comppct_r | name | type 65789 | 20 | a | 7n 65790 | 26 | b | 8m 65791 | 50 | c | 7n 65792 | 90 | d | 7n
但是它总是输出一个错误,说我需要在select语句中使用聚合函数。我应该怎么做呢?
您遇到了每组最多的问题。这是可能的解决方案之一:
select c.mukey, c.comppct_r, c.name, c.type from c yt inner join( select c.mukey, max(c.comppct_r) comppct_r from c group by c.mukey ) ss on c.mukey = ss.mukey and c.comppct_r= ss.comppct_r
另一种可能的方法,相同的输出:
select c1.* from c c1 left outer join c c2 on (c1.mukey = c2.mukey and c1.comppct_r < c2.comppct_r) where c2.mukey is null;
关于此主题,这里有一个全面而解释性的答案:SQL仅选择列上具有最大值的行