这是我的第一篇文章,我是SQL新手
我有一张像这样的桌子
H Amount Count ID
h1 2 1 x
h2 3 2 x
h3 5 3 x
h1 3 3 x
h1 1 5 y
h2 3 2 x
h3 1 1 x
h3 2 3 y
h2 5 5 y并且我希望每个H组的SUM(数量*计数)基于该H组中的id / Total SUM(数量*计数)
i.e
H value ID
h1 11/16 x value = (2*1+3*3)/2*1+3*3+1*5
h1 5/16 y value = 1*5/ 2*1+3*3+1*5
h2 12/37 x
h2 25/37 y
h3 16/22 x
h3 6/22 y我的目标是按H分组,然后在每个组上执行- Sum(average*count) Over(partition by ID) / Sum(average*count)
但是我不能写这样的查询,你们能帮帮我吗?我很抱歉我的格式,谢谢
发布于 2012-07-23 05:33:47
试试这个:
SELECT t2.h, t1.value1/t2.value2, t1.id
FROM
(SELECT sum(value) as value1, id from table
group by id) as t1,
(SELECT sum(value) as value2, h from table
group by h) as t2
WHERE t1.h = t2.h发布于 2012-07-23 05:37:15
简单的答案是使用内部查询,如下所示:
SELECT SUM(Amount * Count), (SELECT SUM(Amount * Count) FROM table AS t2 WHERE t2.H = t1.H)
FROM table AS t1
GROUP BY H, ID对于两个不同的查询,这实际上引用了与t1和t2相同的表。
但是,您正在使用的特定数据库管理系统(MySQL、Microsoft SQL Server、sqlite等)可能有一个内置函数来处理这类事情。你应该看看你的DBMS提供了什么(或者在这里用特定的平台标记你的问题)。
发布于 2012-07-23 05:40:41
您要做的是获得被除数的值(数量之和*每个h -> id组的计数),并将除数值(金额的总和*每个h组的计数)连接到另一个子选择中:
SELECT
a.h, a.id, a.dividend / b.divisor AS value
FROM
(
SELECT h, id, SUM(amount*count) AS dividend
FROM tbl
GROUP BY h, id
) a
INNER JOIN
(
SELECT h, SUM(amount*count) AS divisor
FROM tbl
GROUP BY h
) b ON a.h = b.hhttps://stackoverflow.com/questions/11604047
复制相似问题