首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >访问查询中的分组加权平均

访问查询中的分组加权平均
EN

Stack Overflow用户
提问于 2019-03-11 23:01:43
回答 2查看 79关注 0票数 2

我试图从这些数据中获得每个客户/产品/城市销售的加权平均费用%。我不需要副产品的详细程度。

我的数据如下:

代码语言:javascript
运行
复制
+--------+---------+-------+--------------+-------+----------------+
| 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%)

在完成此操作之后,我将有另一个查询,它只接受上次查询中的客户端、产品、城市销售和新的加权平均字段。我需要另一个查询,因为我将使用结果作为更大查询的一部分。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-03-11 23:23:09

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

代码语言:javascript
运行
复制
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

这个带有示例数据的DB Fiddle演示返回:

代码语言:javascript
运行
复制
| client | product | city | res                             |
| ------ | ------- | ---- | ------------------------------- |
| a      | b       | b    | 0.016666666294137638            |
| c      | c       | b    | 0.029999999329447746            |
| d      | c       | b    | 0.03999999910593033             |
票数 0
EN

Stack Overflow用户

发布于 2019-03-11 23:28:45

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

代码语言:javascript
运行
复制
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以适应您的表名。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55111650

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档