【问题标题】:Grouped Weighted Average in Access Query访问查询中的分组加权平均
【发布时间】:2019-08-02 08:17:03
【问题描述】:

我试图从该数据中获得每个客户/产品/城市组合的加权平均销售额百分比。我不需要子产品的详细程度。

我的数据如下所示:

+--------+---------+-------+--------------+-------+----------------+
| 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%)

完成此操作后,我将进行另一个查询,该查询仅包含上一个查询中的客户、产品、城市销售额和新的加权平均字段。我需要另一个查询,因为我将使用结果作为更大查询的一部分。

【问题讨论】:

  • 我们不会解决你的作业。请向我们提供您的尝试证明。

标签: sql ms-access average weighted


【解决方案1】:

使用窗口函数会更容易完成,但由于您使用的是 ms-access... 您可以在子查询中计算每个客户/产品/城市的销售小计,然后使用原始表计算 JOIN

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 与您的示例数据返回:

| client | product | city | res                             |
| ------ | ------- | ---- | ------------------------------- |
| a      | b       | b    | 0.016666666294137638            |
| c      | c       | b    | 0.029999999329447746            |
| d      | c       | b    | 0.03999999910593033             |

【讨论】:

  • 谢谢!我花了一些时间来破译,因为您代码中的某些语法不起作用,但现在可以了!
【解决方案2】:

您可以计算总销售额和费用值作为子查询的一部分,然后使用结果值执行除法,例如:

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 以适合您的表名。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-08-05
    • 2017-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-16
    • 1970-01-01
    相关资源
    最近更新 更多