Python 有条件查找组的最大值的查询

Python 有条件查找组的最大值的查询,python,sqlite,Python,Sqlite,我有一个表,其中有名称、组名和值。每个组名始终以单个名称显示。如果组名以单个名称显示,则组名字段始终为空。名称可以属于某个组,但不是必需的。我举一个例子: Name Group Value ----------------------- name1 | group1 | 10,000 name2 | group1 | 12,000 name3 | group2 | 9,000 group1| | 40,000 name4 | group2 | 30,000 name5

我有一个表,其中有名称、组名和值。每个组名始终以单个名称显示。如果组名以单个名称显示,则组名字段始终为空。名称可以属于某个组,但不是必需的。我举一个例子:

Name    Group    Value
-----------------------
name1 | group1 | 10,000
name2 | group1 | 12,000
name3 | group2 |  9,000
group1|        | 40,000
name4 | group2 | 30,000
name5 |        | 11,000
group2|        |  1,000
name6 | group1 | 19,000
我希望从该表中获得每个名称的以下结果:

若名称属于组,则取组的名称、组名称和最大值 若名称不属于某个组,则将名称、名称再次作为组名和值 根据上述示例,结果应如下所示:

Name    Group    Max(V)
-----------------------
name1 | group1 | 40,000
name2 | group1 | 40,000
name3 | group2 | 30,000
group1| group1 | 40,000
name4 | group2 | 30,000
name5 | name5  | 11,000
group2| group2 | 30,000
name6 | group1 | 40,000

我知道如何通过两个单独的查询和一些python数据混合来获得它。但是,我想知道哪种方法最适合实现它,以及是否可以通过一个查询获得相同的结果?

最适合SQL ic的方法是使用一个SQL查询

可以使用a和a计算两个不同的值:

选择名称, GroupColumn不为NULL时的情况 然后分组列 别称 以团体形式结束, 选择maxValue 从MyTable中选择T2 其中T2.GroupColumn=MyTable.GroupColumn 或T2.Name=MyTable.GroupColumn 作为MaxV 从MyTable; 但有一种方法可以替换空值;GroupColumn的整个表达式可以简化为ifnullGroupColumn,Name

结果:

n  name      groupnum  maxv    
-  --------  --------  --------
1  name1     group1    40000   
2  name2     group1    40000   
3  name3     group2    30000   
4  group1    group1    40000   
5  name4     group2    30000   
6  name5     name5     11000   
7  group2    group2    30000   
8  name6     group1    40000   

您需要SQLite版本3.8.3 2014或更新版本才能理解WITH子句。如果您使用的是旧版本,那么sql很容易重写,只需在后面使用带子选择的括号即可

谢谢你!我认为对于maxv,如果GroupColumn不为null,它将获得最大值,如果GroupColumn为null,则只获得值。因此,对于行group2 | | 1000,结果只会是group2 | group2 | 1000,尽管group2的最大值应该是30000。你觉得呢?我觉得我想得不够…
n  name      groupnum  maxv    
-  --------  --------  --------
1  name1     group1    40000   
2  name2     group1    40000   
3  name3     group2    30000   
4  group1    group1    40000   
5  name4     group2    30000   
6  name5     name5     11000   
7  group2    group2    30000   
8  name6     group1    40000