我有一个庞大的SALES_ORDERS
数据库,我需要确定SELLING_AGENT
中每个ORDER
中的百分比。
学习postgresql,这只是一个示例,它包含约50万行数据。每个ORDER#
可以由数十个SALE_ITEM
组成(但只能由'SALE_ITEM_1'
和'SALE_ITEM_2'
组成。)
我认为我可以尝试执行SUM SELECT这样的操作:
SELECT (SUM(sale_item_1)+sum(sale_item_2)) as total_person_sale
FROM SALES_ORDER
WHERE orderNumber LIKE orderNumber
GROUP by SELLING_AGENT
但是很明显,我不理解使用WHERE语句来计算相似次数
希望填写最后一栏,如下所示: 销售代理:
selling agent: Order# Sale_item_1 Sale_item_2 %_of_TOTAL_order
jim abc $1.00 $2.00 14.29%
steve abc $3.00 $4.00 33.33%
carl abc $5.00 $6.00 52.38%
carl def $7.00 $8.00 31.25%
steve def $9.00 $9.00 37.50%
jim def $8.00 $7.00 31.25%
steve ghi $6.00 $5.00 61.11%
patty ghi $4.00 $3.00 38.89%
答案 0 :(得分:1)
您正在尝试做一些高级的事情。我给你两个选择:
SELECT selling_agent, orderNumber,
sum(sale_item_1) as sale_item_1,
sum(sale_item_2) as sale_item_2,
(sum(sale_item_1) + sum(sale_item_2)) * 100.00 /
sum(sum(sale_item_1) + sum(sale_item_2)) over (partition by orderNumber) as orderPercentage
FROM sales_db
--WHERE orderNumber LIKE orderNumber /* I'm not sure what this is about */
GROUP by orderNumber, selling_agent
ORDER BY orderNumber, selling_agent
这是通过子查询的旧方法:
SELECT selling_agent, orderNumber,
sum(sale_item_1) as sale_item_1,
sum(sale_item_2) as sale_item_2,
(sum(sale_item_1) + sum(sale_item_2)) * 100.00 /
(
select sum(sale_item_1 + sale_item_2)
from sales_db s2
where s2.orderNumber = s.orderNumber
)
FROM sales_db s
--WHERE orderNumber LIKE orderNumber
GROUP by orderNumber, selling_agent
ORDER BY orderNumber, selling_agent
顺便说一句,如果每个订单号每个代理商只代表一次,则可以简化一下。
答案 1 :(得分:0)
类似这样的东西:
SELECT
s.*,
ROUND (
100.00 * (s.sale_item_1 + s.sale_item_2) /
(SELECT
SUM(sale_item_1 + sale_item_2)
FROM sales_db
WHERE orderNumber = s.orderNumber), 2) percentage
FROM sales_db s;
请参见demo