在SQL中,如何将一个值除以它所在的行数?

在SQL中,如何将一个值除以它所在的行数?,sql,sql-server,Sql,Sql Server,我从两个表中进行选择,一个是product表,一个是shipping表,然后构建下表,但是我想将product$值除以每个ID的行数,这样product$就可以在它出现的所有行之间分割。在我构建表时,在select语句中是否有这样做的方法 我所拥有的: ID | Product $ | Shipping $ --------------------------------- 123456 | 200.00 | 5.00 123456 | 200.00 | 10.00

我从两个表中进行选择,一个是product表,一个是shipping表,然后构建下表,但是我想将product$值除以每个ID的行数,这样product$就可以在它出现的所有行之间分割。在我构建表时,在select语句中是否有这样做的方法

我所拥有的:

  ID   |  Product $ | Shipping $
---------------------------------
123456 |  200.00    |  5.00
123456 |  200.00    | 10.00
123567 |  186.00    |  7.99
我想要的是:

  ID   |  Product $ | Shipping $
---------------------------------
123456 |  100.00    |  5.00
123456 |  100.00    | 10.00
123567 |  186.00    |  7.99
这个怎么样

SELECT p.ID, (p.[Product $] / c.CNT ) as [Result]
(
    SELECT ID,sum([Product $]) as [Product $]
    FROM [table]
    group by ID
) p inner join
(
    SELECT ID,count(1) as CNT
    FROM [table]
    group by ID
) c on (p.ID = c.ID)

在加入product&shipping表之前,您可以根据计数计算产品价格(如内部查询中所示),然后可以将其与shipping表进行内部联接。在post视图中,可以使用以下查询作为参考:

SELECT ps.id
    ,t1.new_c
    ,ps.shipping
FROM product_shipping ps
INNER JOIN (
    SELECT id
        ,product / count(1) new_c
    FROM product_shipping
    GROUP BY id
        ,product
    ) t1 ON ps.id = t1.id;
由于sqlfiddle已关闭,因此使用它比使用子查询更简单:

SELECT
  [ID]
 ,[Product $] / COUNT(*) OVER(PARTITION BY [ID])
 ,[Shipping $]
FROM MyTable

平均值不起作用,因为$200和$200的平均值仍然是$200。很抱歉,您可以通过子查询来实现这一点。我将更新我的帖子。平均值不起作用,因为$200和$200的平均值仍然是$200。我在子查询中遇到了问题,所以我采用了事先计算临时表中倍数的方法,并在上面构建表时使用了这种方法。谢谢大家的帮助。这是学习窗口功能如何工作的理想案例。这太棒了。非常感谢。
SELECT ps.id
    ,t1.new_c
    ,ps.shipping
FROM product_shipping ps
INNER JOIN (
    SELECT id
        ,product / count(1) new_c
    FROM product_shipping
    GROUP BY id
        ,product
    ) t1 ON ps.id = t1.id;
SELECT
  [ID]
 ,[Product $] / COUNT(*) OVER(PARTITION BY [ID])
 ,[Shipping $]
FROM MyTable