访问查询中的分组加权平均值
Grouped Weighted Average in Access Query
我正在尝试从该数据中获取每个 Client/Product/City 组合的销售额的加权平均费用百分比。我不需要子产品的详细程度。
我的数据是这样的:
+--------+---------+-------+--------------+-------+----------------+
| Client | Product | City | Sub Product | Sales | Fee % of Sales |
+--------+---------+-------+--------------+-------+----------------+
| a | b | b | c | 1000 | 1% |
| a | b | b | d | 2000 | 2% |
| c | c | b | c | 3000 | 3% |
| d | c | b | c | 4000 | 4% |
+--------+---------+-------+--------------+-------+----------------+
我想计算对每个客户和产品组合收取的加权平均费用百分比。即对于客户 'a'
、产品 'b'
、城市 'b'
:销售额的费用百分比为 (1,000/3,000)*1% + (2,000/3000 * 2%)
执行此操作后,我将进行另一个查询,该查询仅采用上次查询中的客户、产品、城市销售额和新的加权平均字段。我需要另一个查询,因为我会将结果用作更大查询的一部分。
使用 window 函数会更容易完成,但由于您使用的是 ms-access...您可以在子查询中计算每个 client/product/city 的销售小计,然后 JOIN
与原来的 table:
SELECT
t.client, t.product, t.city, SUM(t.sales * t.fee / t1.sales) res
FROM
mytable t
INNER JOIN (
SELECT client, product, city, SUM(sales) sales
FROM mytable
GROUP BY client, product, city
) t1
ON t1.client = t.client
AND t1.product = t.product
AND t1.city = t.city
GROUP BY t.client, t.product, t.city
此 demo on DB Fiddle 与您的示例数据 returns:
| client | product | city | res |
| ------ | ------- | ---- | ------------------------------- |
| a | b | b | 0.016666666294137638 |
| c | c | b | 0.029999999329447746 |
| d | c | b | 0.03999999910593033 |
您可以计算总销售额和费用值作为子查询的一部分,然后用结果值执行除法,例如:
select
q.client,
q.product,
q.city,
q.fee/q.totalsales as weightedfee
from
(
select
t.client,
t.product,
t.city,
sum(t.sales) as totalsales,
sum(t.sales*t.[fee % of sales]) as fee
from yourtable t
group by t.client, t.product, t.city
) q
更改 yourtable
以适合您的 table 名称。
我正在尝试从该数据中获取每个 Client/Product/City 组合的销售额的加权平均费用百分比。我不需要子产品的详细程度。
我的数据是这样的:
+--------+---------+-------+--------------+-------+----------------+
| Client | Product | City | Sub Product | Sales | Fee % of Sales |
+--------+---------+-------+--------------+-------+----------------+
| a | b | b | c | 1000 | 1% |
| a | b | b | d | 2000 | 2% |
| c | c | b | c | 3000 | 3% |
| d | c | b | c | 4000 | 4% |
+--------+---------+-------+--------------+-------+----------------+
我想计算对每个客户和产品组合收取的加权平均费用百分比。即对于客户 'a'
、产品 'b'
、城市 'b'
:销售额的费用百分比为 (1,000/3,000)*1% + (2,000/3000 * 2%)
执行此操作后,我将进行另一个查询,该查询仅采用上次查询中的客户、产品、城市销售额和新的加权平均字段。我需要另一个查询,因为我会将结果用作更大查询的一部分。
使用 window 函数会更容易完成,但由于您使用的是 ms-access...您可以在子查询中计算每个 client/product/city 的销售小计,然后 JOIN
与原来的 table:
SELECT
t.client, t.product, t.city, SUM(t.sales * t.fee / t1.sales) res
FROM
mytable t
INNER JOIN (
SELECT client, product, city, SUM(sales) sales
FROM mytable
GROUP BY client, product, city
) t1
ON t1.client = t.client
AND t1.product = t.product
AND t1.city = t.city
GROUP BY t.client, t.product, t.city
此 demo on DB Fiddle 与您的示例数据 returns:
| client | product | city | res |
| ------ | ------- | ---- | ------------------------------- |
| a | b | b | 0.016666666294137638 |
| c | c | b | 0.029999999329447746 |
| d | c | b | 0.03999999910593033 |
您可以计算总销售额和费用值作为子查询的一部分,然后用结果值执行除法,例如:
select
q.client,
q.product,
q.city,
q.fee/q.totalsales as weightedfee
from
(
select
t.client,
t.product,
t.city,
sum(t.sales) as totalsales,
sum(t.sales*t.[fee % of sales]) as fee
from yourtable t
group by t.client, t.product, t.city
) q
更改 yourtable
以适合您的 table 名称。