【问题标题】:% of Total group by count of other column按其他列计数占总组的百分比
【发布时间】:2021-01-06 02:20:22
【问题描述】:

我想从 mysql 中具有多个购买记录的项目中获取总销售额的百分比。提前致谢。

我的桌子

ItemId | SalesAmt
-------+---------
X1000  | 50  
X1000  | 200  
X1001  | 150

想要的结果

itemType | Sales_pct
---------+----------
multip   | 0.75  
single   | 0.25

【问题讨论】:

    标签: mysql sql count sum percentage


    【解决方案1】:

    一个选项使用两个级别的聚合:

    select itemtype, sum(amt) / sum(sum(amt)) over() sales_ratio
    from (
        select 
            case when count(*) > 1 then 'mutiple' else 'single' end itemtype,
            sum(amt) amt
        from mytable
        group by itemid
    ) t
    group by itemtype
    

    【讨论】:

      【解决方案2】:

      @GMB 解决方案使用window function,因此不能在 MySQL 5 中使用。。 MySQL 5 的以下解决方案。

      select 
          sum(if(cnt = 1, amnt, null)) / sum(amnt) as single, 
          sum(if(cnt = 1, null, amnt)) / sum(amnt) as multiple
      from (
          select ItemId, count(*) cnt, sum(SalesAmt) amnt from test group by ItemId
      ) t;
      

      这里是fiddle

      结果

      single | multiple
      -------+---------
      0.3750 |   0.6250
      

      【讨论】:

      • 如果输出无法匹配所需的结果,那么我很想暗示某处有问题
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-09-05
      • 2019-11-27
      • 2020-03-27
      • 1970-01-01
      相关资源
      最近更新 更多