Dyl*_*nsq 15 sql ms-access greatest-n-per-group
我试图从一列中选择最大值,同时按另一个具有多个重复值的非唯一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
...
Run Code Online (Sandbox Code Playgroud)
这适用于:
SELECT c.mukey, Max(c.comppct_r) AS ComponentPercent
FROM c
GROUP BY c.mukey;
Run Code Online (Sandbox Code Playgroud)
返回一个表格如下:
mukey | ComponentPercent
65789 | 20
65790 | 26
65791 | 50
65792 | 90
Run Code Online (Sandbox Code Playgroud)
我希望能够在不影响GROUP BY功能的情况下添加其他列,在输出表中包含名称和类型等列,如:
mukey | comppct_r | name | type
65789 | 20 | a | 7n
65790 | 26 | b | 8m
65791 | 50 | c | 7n
65792 | 90 | d | 7n
Run Code Online (Sandbox Code Playgroud)
但它总是输出一个错误,说我需要使用带有select语句的聚合函数.我应该怎么做呢?
Adr*_*iro 21
你有自己最大的每组问题.这是可能的解决方案之一:
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
Run Code Online (Sandbox Code Playgroud)
另一种可能的方法,相同的输出
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;
Run Code Online (Sandbox Code Playgroud)
这里有关于该主题的全面和解释性答案:SQL仅选择列上具有最大值的行
| 归档时间: |
|
| 查看次数: |
53926 次 |
| 最近记录: |