SQL - Group 和 Aggregation 以计算相对于总数的比率

SQL - Group and Aggregation to calculate ratio with respect to total

我的 table 如下所示:

产品 报价

产品 1 O1

产品 1 O1

产品 1 O2

产品 2 O3

产品 2 O4

其中产品是网站上列出的产品,报价是客户查看的产品的报价。

我想要的是一个查询,以显示每个报价视图相对于该产品的总报价视图的百分比。 所以结果应该如下所示:

产品 报价 查看百分比

Product1 O1 67%

产品 1 O2 33%

产品 2 O3 50%

产品 2 O4 50%

从 Oracle 11g 开始,RATIO_TO_REPORT 是一个分析函数,在这里很有用。

看这里。

SELECT product,
  offer,
  round(RATIO_TO_REPORT(cnt) over(partition by  product ) * 100 ) AS "%" 
FROM 
 ( SELECT product,
          offer,
           COUNT(offer) cnt 
   FROM tab
    GROUP BY product, offer);

您可以使用 window 函数来计算每个报价的观看百分比:

SELECT DISTINCT product, offer,
     100.0 * (COUNT(*) OVER (PARTITION BY product, offer)) / (COUNT(*) OVER (PARTITION BY product)) AS ViewPercentage
FROM offers

将聚合与 window 函数结合使用:

SELECT product, offer,
       COUNT(*) / SUM(COUNT(*)) OVER (PARTITION BY producct) as ViewRatio
FROM offers
GROUP BY product, offer;

注意:这会产生 0 到 1 之间的比率,而不是 0 到 100 之间的值。如果确实需要,可以乘以 100。如果需要,甚至可以使用 % 转换为字符串。