对于MySQL中的表,我有两列
col1 col2
1 4.5
1 4.8
1 4.4
1 3.9
1 7.6
1 4.5
2 2.9
2 4.8
2 5.6
2 4.5
3 8.9
3 9.7
3 7.8
3 8.2
3 4.3
我想做的是
SELECT col1,AVG(col2)FROM mytable GROUP BY col1
1 4.95
2 4.45
3 7.78
2。如果col2值小于col1值的平均值,则col1值等于col1-1,选择记录。我无法弄清楚这一部分:
SELECT col1,col2 FROM mytable WHERE col2<AVG(col2 where col1= current col1-1)
结果集应为:
2 2.9
2 4.8
2 4.5
3 4.3
由于col1 = 0没有记录,因此col1 = 1
没有记录答案 0 :(得分:4)
试试这个:
SELECT t1.*
FROM @yourtable AS t1
INNER JOIN
(
SELECT col1, AVG(col2) col2avg
FROM @yourtable
GROUP BY col1
) AS t2 ON t1.col1 - 1 = t2.col1
AND t1.col2 < t2.col2avg;
答案 1 :(得分:1)
拥有子句和自我加入可以让你这样做
Select a.col1, a.col2,
Avg(b.Col2) AvgCol2
From yourTable a
Join yourTable b
On b.col1 = a.col1 - 1
Group By a.col1, a.col2
Having a.col2 < Avg(b.Col2)
对于您的样本数据,例如,它会返回
col1 col2 AvgCol2
-------- -------- --------
2 2.9 4.95
3 4.3 4.45
2 4.5 4.95
2 4.8 4.95
说明:
考虑这一点的一种方法是Having
是用于过滤在Group By查询中聚合后构造的结果集的子句,而Where
子句是仅在聚合之前构建的临时结果集的过滤器(或在排序之前)在非分组查询中。