当存在 2 个分组条件时如何计算 mysql/sql 中的百分比

Posted

技术标签:

【中文标题】当存在 2 个分组条件时如何计算 mysql/sql 中的百分比【英文标题】:how to compute percentage in mysql/sql when 2 group by conditions are present 【发布时间】:2019-06-23 09:11:48 【问题描述】:
id title   count organizer
1  music   4     2
2  sports  6     2
3  music   2     3

我有一个具有上述结构的派生表。我需要计算每个标题的每个组织者的事件数量的百分比。即我期待这样的结果:

organizer  title   percentage
2          music   40%
2          sports  60%
3          music   100%

我在没有考虑组织者的情况下这样做的方式会产生轻松汇总所有值的百分比,但引入组织者会搞砸一切。有人可以帮我吗??

【问题讨论】:

请显示您的源数据和查询到目前为止。向我们展示结果并说“这些是错误的,帮帮我”对我们没有多大用处 @CaiusJard 数据没有错。这就是目前的数据和我想要得到的数据。这张桌子非常大,可以张贴所有内容。到目前为止,我的查询已经产生了第一个表。 我没有说我想要整个表,只要你已经编写的查询和产生这些结果的数据样本就可以了 【参考方案1】:

将派生表作为实际数据(可能不是最佳数据),您可以:

select to.organizer, to.title, 100.0*to.count/o.count as percentage
from
  (select organizer, sum(count) as count from derivedtable group by organizer) o
  inner join
  derivedtable to 
  on
    to.organizer = o.organizer

它的工作原理是将每个组织者的数据相加得到一个总数,然后将其加入到您拥有的数据中,这样您就可以将特定的事件组织者计数除以该组织者的总数

可能有一种更简单的方法来处理您的源数据,因为您必须插入查询来创建您的派生表,这可能会使它变得混乱。作为 CTE 可能最简单,但是下次您提出问题时,请尝试包含原始源数据和“到目前为止的查询”,否则我们必须在我们一无所知的解决方案之上构建解决方案,结果可能不会是最优的

【讨论】:

【参考方案2】:

您可以在下面尝试 - 使用标量子查询

DEMO

select organizer,title,count*100/(select sum(count) from tablename b where a.organizer=b.organizer)
from tablename a

输出:

organizer   title   percentage
   2        music   40.0000
   2        sports  60.0000
   3        music   100.0000

【讨论】:

以上是关于当存在 2 个分组条件时如何计算 mysql/sql 中的百分比的主要内容,如果未能解决你的问题,请参考以下文章

当必须根据条件对记录进行分组时如何选择最多 x 行

如何使用SQL语句,实现多条件分组统计

在SQL中分组查询 Group by 的存在条件是啥

C# 属性列表。需要根据2个条件对它们进行分组[重复]

当存在平局时如何总结数据集中的前 3 个最高值

如何根据条件附加指令