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。如果需要,甚至可以使用 %
转换为字符串。
我的 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。如果需要,甚至可以使用 %
转换为字符串。