这是表的一部分,我通过对value1进行排序来显示
uniquekey city test2 test3 value1
0 001 NYC 40.724159 -73.754968 32
1 002 NYC 40.753028 -73.921620 22
2 003 LAX 40.845642 -73.902110 20
3 003 LAX 40.845642 -73.902110 19
4 002 NYC 40.753028 -73.921620 18
5 004 LAX 40.870346 -73.904400 17
6 005 LAX 40.849560 -73.834010 17
7 006 LAX 40.851080 -73.848611 17
8 002 NYC 40.753028 -73.921620 16
9 007 NYC 40.762978 -73.831980 16
我希望返回纽约市的最高价值1和洛杉矶国际机场的最高价值1。
这里棘手的事情是,显示第0行和第2行不是一个容易的问题,因为有几行具有相同的唯一键,即对于NYC行1、4、8,对于LAX行2和3。
预期输出应为
city test2 test3 max(value1)
0 NYC 40.724159 -73.754968 66 <----32+18+16
1 LAX 40.845642 -73.902110 39 <----20+19
这是我的代码
query = '''
select city, test2, test3, max(value1)
from nypd
where city IN ('NYC','LAX')
group by city
order by value1 DESC
'''
它仅显示前2个:
city test2 test3 max(value1)
0 NYC 40.724159 -73.754968 32
1 LAX 40.845642 -73.902110 20
答案 0 :(得分:2)
您首先需要进行汇总,以获取A B C D E F G H
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 9
1 2 3 4 5 6 7 10
1 2 3 4 5 6 7 11
1 2 3 4 5 6 7 12
1 2 3 4 5 6 7 13
,uniquekey
,city
和test2
组合的总和。
然后,要获得每个城市的总和最高的货币,可以过滤test3
窗口函数,按城市划分,并以总和降序为row_number()
进行排序。
1
但是,SQLite 3.25.0之前的旧版本不支持SELECT city,
test2,
test3,
value1
FROM (SELECT city,
test2,
test3,
sum(value1) value1,
row_number() OVER (PARTITION BY city
ORDER BY sum(value1) DESC) rn
FROM nypd
WHERE city IN ('NYC', 'LAX')
GROUP BY uniquekey,
city,
test2,
test3) x
WHERE rn = 1;
。在这里,您可以使用row_number()
和相关子查询来检查是否存在大于当前总和的总和,或者在出现平局的情况下,检查另一行的EXISTS
是否更大。聚合可以放在CTE中,因此不需要在子查询中重复进行。
uniquekey
答案 1 :(得分:2)
怎么样?
select n.city, n.lat, n.long, sum(n.value1)
from nypd n
where n1.uniquekey = (select max(n2.uniquekey)
from nypd n2
where n2.city = n.city
)
group by n.city, n.lat, n.long;