SQL查询 - GROUP BY,PARTITION BY

时间:2012-07-22 21:16:03

标签: sql

这是我的第一篇文章,我是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分区)/总和(平均值*计数)

但是我无法写出这样的查询你们可以帮帮我吗。  抱歉格式化  感谢

3 个答案:

答案 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

对于两个不同的查询,这实际上与t1t2相同。

但是,您正在使用的特定数据库管理系统(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