这是我的第一篇文章,我是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(Amount * Count)基于该H组中的id / Total SUM(Amount * Count)
即
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分组,然后按照每个组进行分组 - 总和(平均值*计数)结束(按ID分区)/总和(平均值*计数)
但是我无法写出这样的查询你们可以帮帮我吗。 抱歉格式化 感谢
答案 0 :(得分:1)
试试这个:
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
答案 1 :(得分:0)
简单的答案是使用如下的内部查询:
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提供的内容(或在此处使用特定平台标记您的问题)。
答案 2 :(得分:0)
您要做的是获取红利值(金额*每个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.h