2012-07-22 168 views
1

這是我的第一篇文章,我是新來的SQLSQL查詢 - GROUP BY,PARTITION BY

我有每個H的像

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 

,我想SUM(金額*計數)表該H基團中的基於ID /總和(金額*計數)

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和然後按o每個組我必須做 - 總和(平均*計數)結束(按ID劃分)/總和(平均*計數)

但我不能寫這樣的查詢可以請大家幫幫我。 約在格式化遺憾 感謝

回答

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 
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提供了什麼(或者用特定的平臺在這裏標記你的問題)。

+0

謝謝很多 – user1544460 2012-07-29 08:48:58

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