【问题标题】:MySQL Select SUM of results ignoring LIMITMySQL选择忽略LIMIT的结果总和
【发布时间】:2020-12-21 02:16:03
【问题描述】:

假设我有一张桌子,里面有 100 件物品和这些物品的销售价值。从理论上讲,我希望能够获得前 15 个最畅销的商品,其总销售额的底行(仅前 15 名的总数),并有另一列是每个商品相对于总销售额的百分比份额销售额(表中所有项目的总和)。

我认为也许使用 rank、limit 15 和 GROUP BY rank WITH ROLLUP 可以解决我的前半部分问题,但我无法弄清楚之后如何参考所有 100 件商品的总销售额获取 % share 列。

这可能吗?非常感谢

【问题讨论】:

  • 样本数据和所需结果。
  • 除了下面的代码你还想要什么?我认为它工作正常。
  • 一般情况下,数据显示问题最好在应用代码中解决

标签: mysql sql


【解决方案1】:

计算两次可能是最简单的:

with i15 as (
      select t.item, sum(sales) as sales,
             sum(sales) / sum(sum(sales)) over () as sales_ratio
      from t
      group by t.item
      order by sum(sales) desc
      limit 15
     )
select item, sales, sales_ratio
from i15
union all
select 'total', sum(sales), sum(sales_ratio)
from i15;
         

【讨论】:

    猜你喜欢
    • 2012-04-10
    • 1970-01-01
    • 2019-05-19
    • 1970-01-01
    • 2015-01-25
    • 1970-01-01
    • 2018-06-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多