1

これは私の最初の投稿であり、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グループのid / Total SUM(Amount*Count)に基づいて、各Hグループの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 でグループ化し、次に各グループで実行することです - Sum(average*count) Over(partition by ID) / Sum(average*count)

しかし、私はそのようなクエリを書くことができません。助けてください。そしてフォーマットについて申し訳ありませんありがとう

4

3 に答える 3

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
于 2012-07-22T21:33:47.487 に答える
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これは基本的に、両方とt22 つの異なるクエリで同じテーブルを参照します。

ただし、使用している特定のデータベース管理システム (MySQL、Microsoft SQL Server、sqlite など) には、この種のことを処理するための組み込み関数がある場合があります。DBMS が提供するものを調べる必要があります (または、ここで質問に特定のプラットフォームのタグを付けます)。

于 2012-07-22T21:37:15.007 に答える
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
于 2012-07-22T21:40:41.073 に答える