如何计算平均值但不在sql中对它们进行分组?

时间:2016-03-02 05:08:20

标签: sql hive

我知道这应该很简单,但我似乎无法正确理解。我想加入表AB并计算A中唯一项的平均值,而不对它们进行分组。

表A

ID        code
1         10
1         19
2         10
2         11

表B

code     value
10       0.3
11       0.5
19       0.1

我想加入code,然后计算每个ID的相应值的平均值: 结果表应为

ID     codes   average
1      10      0.2
1      19      0.2
2      10      0.4
2      10      0.4

这有意义吗?

我知道可以使用group by然后使用avg(来聚合它们,但我不打算聚合,我想在这种情况下保留重复的平均值。

2 个答案:

答案 0 :(得分:2)

您可以将over(partition by...)Avg一起使用。

SELECT A.ID
    , A.CODE
    , AVG(B.VALUE) OVER(PARTITION BY A.ID)
FROM TableA A
LEFT JOIN TableB B
on a.code = b.code

答案 1 :(得分:-2)

直接的解决方案是子查询:

SELECT A.ID, A.code, 
  (SELECT AVG(B.value) 
   FROM B INNER JOIN A A2 ON B.code = A2.code
   WHERE A.id = B.id) AVERAGE
FROM A