【问题标题】:SQL Query - GROUP BY , PARTITION BYSQL 查询 - GROUP BY , PARTITION BY
【发布时间】:2012-07-22 21:16:02
【问题描述】:

这是我的第一篇文章,我是 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 分组,然后在每个 GROUP 上我必须做 - Sum(average*count) Over(partition by ID) / Sum(average*count)

但是我不能写这样的查询,你们能帮帮我吗? 对格式感到抱歉 谢谢

【问题讨论】:

    标签: sql


    【解决方案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
    

    【讨论】:

      【解决方案2】:

      简单的答案是像这样使用内部查询:

      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 提供什么(或在此处使用特定平台标记您的问题)。

      【讨论】:

        【解决方案3】:

        您要做的是获取除数(每个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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-01-21
          • 2022-01-03
          • 2021-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-12-31
          相关资源
          最近更新 更多