Python SQLite如何根据自定义规则对数据进行分组

Python SQLite如何根据自定义规则对数据进行分组,python,sql,sqlite,Python,Sql,Sqlite,我有一张如下的桌子。 如果我在name字段上执行group by操作,b的键是11,但我需要保留的是12,因为12已经出现在其他记录中。 在不使用最大聚合方法的情况下,我应该如何实现此结果 介绍表格的含义, key-12还提供name-a,name-b,key-11只提供name-b 对于name-c,有三个键可以提供name-c,它们都不重复 |name|key| | a | 12 | | b | 11 | | b | 12 | | c | 15 | | c | 14 | | c | 17 |

我有一张如下的桌子。 如果我在name字段上执行group by操作,b的键是11,但我需要保留的是12,因为12已经出现在其他记录中。 在不使用最大聚合方法的情况下,我应该如何实现此结果

介绍表格的含义, key-12还提供name-a,name-b,key-11只提供name-b 对于name-c,有三个键可以提供name-c,它们都不重复

|name|key|
| a | 12 |
| b | 11 |
| b | 12 |
| c | 15 |
| c | 14 |
| c | 17 |
....
我希望通过group by获得的结果是:

|name|key |
| a  | 12 |
| b  | 12 |
| c  | 15 | 
要通过名称字段执行分组操作, b需要离开key-12,因为key-12同时提供name-a和name-b,
因此不需要键-11,对于name-c,有三个键可以提供name-c,它们都不重复,所以让我们使用第一次出现的键。

假设
key
对于每个
name
都是唯一的,您可以使用
COUNT()
行数()
窗口函数:

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 
请参阅。
结果:


您想要的输出是什么?您需要解释我们知道键
12
属于
name=a
,而不是
name=b
的逻辑。我在问题中添加了一个描述,非常感谢非常酷,非常感谢,但它可能无法解决我的问题。Sql发现我对键使用了排序。事实上,我不想为这把钥匙分类。这只是一个标志。我想判断他是否出现在其他记录中,以确定是直接使用此记录还是原始group by规则生成的记录。@tomtao此代码不按键排序。它统计一个键在表中出现的次数,以决定为每个名称返回哪个键。最后,出现最多的是每个名字对应的密码。@foroas我可能不太懂你的代码,但也需要提高相应的技能,也许我没有把问题表达清楚,你的代码暂时无法解决我的问题,非常感谢。我考虑重新描述这个问题。谢谢。我的代码解决了您描述的问题。如果您有不同的要求,请提出新问题。非常感谢您的帮助。我将重新描述这个问题。非常感谢。
> name | key
> :--- | --:
> a    |  12
> b    |  12
> c    |  15