sql - 选择 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
解决方案
第一个注意事项:
- 您必须使用显式连接而不是隐式连接。
- 您还必须添加
c.name
到group 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
推荐阅读
- python - tkinter 滚动条未按预期应用选项
- typescript - 如何访问内联子类型
- sql - 快速 Spark 替代 WHERE 列 IN other_column
- node.js - 如何使用 Node js 将数据发送到 Jasper Report?
- c++ - 调用 curl_easy_init() 时 .DLL 无法注入
- firebase - Firestore DB 和 Firebase Cloud Functions 的不同区域
- windows - 无法在 Windows 上的 perl 中获取系统语言环境
- ios - 如何使用 SwiftUI 在详细视图上编辑和覆盖 CoreData
- class - 抽象类传递对对象的引用
- css - VS Code 仅针对 CSS 更改主题颜色