选择和sqlite的最大值

选择和sqlite的最大值,sql,sqlite,sum,max,Sql,Sqlite,Sum,Max,我有这样一些表的结果(700行) 我是通过这个查询得到的 选择c.name作为国家,p.name作为省,总和(数量)作为购买力 来自p省,采购,国家c 其中P.rowid=采购.省和数量>0,c.code=P.国家和产品=0 按p.name分组 我只想要每个国家拥有最高采购权的省份 应考虑性能 ex output country province purchase_power Angola Uige 12 Arge

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

我是通过这个查询得到的

选择c.name作为国家,p.name作为省,总和(数量)作为购买力
来自p省,采购,国家c
其中P.rowid=采购.省和数量>0,c.code=P.国家和产品=0
按p.name分组
我只想要每个国家拥有最高采购权的省份

应考虑性能

ex output 
country         province       purchase_power 
Angola          Uige                12
Argentina       La Rioja            17
第一点注意:

  • 必须使用显式连接而不是隐式连接
  • 您还必须将
    c.name
    添加到
    分组依据
  • 尽管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

同样的结果?什么意思?[22:22:56]SQLiteStudio无法从查询中提取元数据。结果将不可编辑。它提供了与我以前的查询相同的冗余省份我无法表示足够的感谢它现在工作100%正确,非常感谢。我对查询做了一些更改,现在显示c.name为国家,p.name为省份,总和(数量)为购买力,计数()为abs,强制转换(总和(数量)为浮动)/count()作为道具,但我无法删除作为购买力的总和(数量),我也没有找到一种方法来解决
select*from t group by country have max(购买力)
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