首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysql查询以获取表中特定字段的百分比?

问mysql查询以获取表中特定字段的百分比?
EN

Stack Overflow用户
提问于 2019-09-01 19:01:18
回答 1查看 43关注 0票数 0

我有一张费用表:

代码语言:javascript
复制
Expense(amount: Double, vendorId: Int, vendorType: Int)

我想创建一个mysql查询,它将给出每个供应商类型与特定供应商的百分比,例如:

代码语言:javascript
复制
vendorId   vendorType percentOfExpencesOfThisType    totalExpenses

因此,假设我有4个经验:

代码语言:javascript
复制
Expense(amount: 30.0, vendorId: 3, vendorType: 1)
Expense(amount: 58.5, vendorId: 3, vendorType: 1)
Expense(amount: 47.0, vendorId: 3, vendorType: 7)
Expense(amount: 21.5, vendorId: 3, vendorType: 13)

因此该表将如下所示:

代码语言:javascript
复制
vendorId   vendorType percentOfExpencesOfThisType    totalExpenses
3               1                 50                       4
3               7                 25                       4
3               13                25                       4

我该怎么做呢?(很遗憾,使用的是mysql 5.6版)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-09-01 19:04:44

您可以使用聚合函数和窗口函数:

代码语言:javascript
复制
select vendorId, vendorType,
       100 * count(*) / sum(count(*)) over (partition by vendorId) as percentOfExpensesOfThisType,
       sum(count(*)) over (partition by vendorId) as totalExpenses
from expense
group by vendorId, vendorType;

从MySQL 8+开始,可以使用窗口函数。

在早期版本中,您将联接两个聚合查询:

代码语言:javascript
复制
select vendorId, vendorType,
       100 * vt.cnt / v.cnt as percentOfExpensesOfThisType,
       v.cnt as totalExpenses
from (select vendorId, vendorType, count(*) as cnt
      from expense
      group by vendorId, vendorType
     ) vt join
     (select vendorId, count(*) as cnt
      from expense
      group by vendorId
     ) v
     on vt.vendorId = v.vendorId;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57745416

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档