我有一张桌子如下。如果我对name字段执行组操作,那么b的键是11,但我需要离开的是12,因为12已经出现在其他记录中了。在不使用max聚合方法的情况下,我应该做些什么来实现这个结果?
介绍了表的含义,键-12还提供了名称a,名称-b,键-11只提供名称-b的名称-c,有三个键可以提供名称-c,所有这些都不重复。
|name|key|
| a | 12 |
| b | 11 |
| b | 12 |
| c | 15 |
| c | 14 |
| c | 17 |
....我希望透过小组取得的结果是:
|name|key |
| a | 12 |
| b | 12 |
| c | 15 | 要通过name字段执行group by操作,b需要保留key-12,因为key-12同时提供了名称a和名称b,因此不需要key-11。
对于name-c,有三个键可以提供name-c,所有这些都不会重复,所以让我们使用第一次出现的那个键。
发布于 2020-09-11 07:43:05
假设key对每个name都是唯一的,则可以使用COUNT()和ROW_NUMBER()窗口函数:
select name, key
from (
select *, row_number() over (partition by name order by counter desc, rowid) rn
from (
select *, rowid, count(*) over (partition by key) counter
from tablename
)
)
where rn = 1 见演示。
结果:
> name | key
> :--- | --:
> a | 12
> b | 12
> c | 15https://stackoverflow.com/questions/63841740
复制相似问题