首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SQL查询-分组依据、分区依据

问SQL查询-分组依据、分区依据
EN

Stack Overflow用户
提问于 2012-07-23 05:16:03
回答 3查看 2.2K关注 0票数 1

这是我的第一篇文章,我是SQL新手

我有一张像这样的桌子

代码语言:javascript
复制
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(数量*计数)基于该H组中的id / Total SUM(数量*计数)

i.e

代码语言:javascript
复制
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)

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

EN

回答 3

Stack Overflow用户

发布于 2012-07-23 05:33:47

试试这个:

代码语言:javascript
复制
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
EN

Stack Overflow用户

发布于 2012-07-23 05:37:15

简单的答案是使用内部查询,如下所示:

代码语言:javascript
复制
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提供了什么(或者在这里用特定的平台标记你的问题)。

票数 0
EN

Stack Overflow用户

发布于 2012-07-23 05:40:41

您要做的是获得被除数的值(数量之和*每个h -> id组的计数),并将除数值(金额的总和*每个h组的计数)连接到另一个子选择中:

代码语言:javascript
复制
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
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11604047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档