假设我有字段x
和y
,x
可能包含多个相同值的实例。对于x
中相同的所有值,我想使用y
的值来构造那么多新值,这些值对应于那些x
值。例如,让我们将新字段称为z
:
id x y z
1 3.5 17 f(17, 9, 11)
2 3.8 12 f(12, 2)
3 3.5 9 f(17, 9, 11)
4 3.5 11 f(17, 9, 11)
5 4.2 7 f(7)
6 3.8 2 f(12, 2)
7 2.1 13 f(13)
这就像GROUP BY子句,但不是将组折叠成单个记录,而是要将进入它的各个记录分开。
应用的函数f
将只是y
值的平均值,如果它更简单的话。但我想知道是否有可能更广泛地制定这样的问题。
答案 0 :(得分:1)
ANSI标准SQL支持窗口函数,因此可以这样做:
select t.*,
avg(y) over (partition by x) as z
from t;
大多数数据库都支持这些功能。
答案 1 :(得分:0)
窗口函数是正确的,但有些实现(例如MySQL)不支持它们。为了记录,这是一个适用于MySQL的解决方法:
select t.*, u.z
from t, (select x, avg(y) as z from t group by x) as u
where u.x=t.x;