Mysql 查询 - 按国家、地区汇总总计,并占总计的百分比(常规)

Mysql query - summ total by country, region and take percentage of total (general)

提问人:Volodymyr 提问时间:5/19/2019 最后编辑:TotoVolodymyr 更新时间:8/18/2021 访问量:817

问:

我有两张桌子 1. 地理 2. 销售

  1. 带字段的地理位置 国家/地区、城市、userId

  2. 带字段的销售额 UserId、sales_amount

我需要进行查询并有 fileds 的结果 国家 / 城市 / sales_amount (按城市) / 占总数的百分比(一般) 按城市

我怎样才能在没有加入销售表的情况下制作它? 你能帮我查询吗?

我只知道将销售加入到自己身上(但它不起作用)

我试图将 join Sales 本身化,但它不起作用

Select Geo.country, Geo.city, sum(Sales_amount), 
(sum(Sales_amount))/"t" as "percentage of general total"
From Geo
Join 
Sales
On Geo.UserId = Sales.UserId
Join
(Select userId, summ(sales_amount) as "total" from Sales) as "t" 
ON t.userId = Geo.UserId
Group by Geo.country, Geo.city

结果什么都没有(

MySQL 分组百分比

评论

0赞 Raymond Nijland 5/19/2019
请参阅为什么我应该为在我看来非常简单的 SQL 查询提供 MCVE?

答:

0赞 forpas 5/19/2019 #1

表之间的连接,然后按城市求和。
百分比可以通过将每个总和除以总和来检索:

select 
  g.country, 
  g.city,
  sum(s.sales_amount) citysales,
  100.0 * sum(s.sales_amount) / (select sum(sales_amount) from sales) percentage
from geo g left join sales s
on g.userid = s.userid
group by g.country, g.city

评论

0赞 Volodymyr 5/19/2019
也许您知道查询的一些优化或其他解决它的方法?因为销售表太大了,当我运行查询时,它需要很多时间
0赞 forpas 5/19/2019
联接列的索引:geo.userid 和 sales.userid 会有所帮助(如果它们尚不存在)。此外,如果您的 Mysql 版本是 8.0,您可以使用 CTE 代替 ,尽管我相信它已经过优化,因此它只被评估一次。(select sum(sales_amount) from sales)