假设我有下表
+----+-------+
| Id | Value |
+----+-------+
| 1 | 2.0 |
| 2 | 8.0 |
| 3 | 3.0 |
| 4 | 9.0 |
| 5 | 1.0 |
| 6 | 4.0 |
| 7 | 2.5 |
| 8 | 6.5 |
+----+-------+
我想绘制这些值,但是由于我的真实表有成千上万个值,因此我考虑了获取每X行的平均值。我有什么办法可以做到这一点,即每2或4行,如下所示:
2
+-----+------+
| 1-2 | 5.0 |
| 3-4 | 6.0 |
| 5-6 | 2.5 |
| 7-8 | 4.5 |
+-----+------+
4
+-----+------+
| 1-4 | 5.5 |
| 5-8 | 3.5 |
+-----+------+
另外,是否有任何方法可以根据表中的总行数使此X值动态化?像这样,如果我有1000行,则将基于每200行(1000/5)计算平均值,但如果我有20行,则应基于每4行(20/5)计算平均值。
我知道如何以编程方式执行此操作,但是使用纯SQL是否可以执行此操作?
编辑:我需要它在mysql上工作。
根据您的DBMS,类似这样的方法将起作用:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
(
SELECT
Chunk = NTILE(5) OVER (ORDER BY Id),
*
FROM
YourTable
) AS T
GROUP BY
Chunk
ORDER BY
ChunkStart;
无论您有多少行,这都会创建5个组或块。
如果您没有开窗功能,则可以伪造它:
SELECT
ChunkStart = Min(Id),
ChunkEnd = Max(Id),
Value = Avg(Value)
FROM
YourTable
GROUP BY
(Id - 1) / (((SELECT Count(*) FROM YourTable) + 4) / 5)
;
我在这里做了一些假设,例如Id
从1开始并且没有间隔,并且如果事情没有平均分配,那么您将希望最后一组不要太小而不是太大。我还假定整数除法将导致在SQL Server中。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句