首页 > 解决方案 > 选择 sum sqlite 的最大值

问题描述

我有一些这样的表的结果(700行)

country         province       purchase_power 
Angola          Cuanza Sul          10
Angola          Huambo              2
Angola          Namibe              2
Angola          Uige                12
Argentina       Buenos Aires        15
Argentina       Catamarca           3
Argentina       Corrientes          1
Argentina       Jujuy               13
Argentina       La Rioja            17
Argentina       Mendoza             1
Argentina       Misiones            1
Argentina       Neuquen             2
Argentina       San Juan            10
Argentina       San Luis            4
Argentina       Santa Cruz          1

我通过使用这个查询得到了这个

select  c.name as country,p.name as province,sum(qty) as purchase_power
from province p,purchases,country c
where P.rowid = Purchases.province and qty>0 and c.code=p.country and product=0  
group by p.name 

我只想要每个国家购买力最高的省份

应考虑性能

ex output 
country         province       purchase_power 
Angola          Uige                12
Argentina       La Rioja            17

标签: sqlsqlitesummax

解决方案


第一个注意事项:

  • 您必须使用显式连接而不是隐式连接。
  • 您还必须添加c.namegroup by.
  • 尽管 SQLite 允许选择子句中未使用的列group by,但如果您不希望出现意外情况,则必须遵循标准 SQL。

现在,由于性能是一个问题,您可以将 CTE 用于您的查询并只执行一次以使用其结果:

with cte as (
  select 
    c.name as country,
    p.name as province,
    sum(t.qty) as purchase_power
  from province p 
  inner join purchases t on p.rowid = t.province
  inner join country c on c.code = p.country 
  where t.qty > 0 and t.product=0  
  group by c.name, p.name
)
select cte.* from cte 
inner join (
  select country, max(purchase_power) purchase_power
  from cte
  group by country
) t on t.country = cte.country and t.purchase_power = cte.purchase_power

推荐阅读