【问题标题】:AVG growth using query SQL使用查询 SQL 的 AVG 增长
【发布时间】:2016-10-05 23:15:35
【问题描述】:

我有下表:

请帮助我在 SQL 中使用以下查询: “平均值(值 2/值 1,值 3/值 2,值 4/值 3)”

非常感谢!

【问题讨论】:

  • 您使用的是哪个 DBMS??

标签: sql


【解决方案1】:

对于 SQL Server 2008 或更高版本;

; WITH CTE AS
(
SELECT *, LAG(VALUE) OVER(ORDER BY MONTH) AS XX FROM YOURTABLE
) 
SELECT AVG(CAST(VALUE AS FLOAT) / CAST(XX AS FLOAT)) FROM CTE WHERE XX IS NOT NULL

【讨论】:

  • 即使是旧版本的SQL SERVER 也不支持LAG
  • @prdp 。 . . OP 没有指定正在使用的数据库,LAG() 是 ANSI 标准功能。
  • 你可以用其他方式给我打电话吗?非常感谢
  • 其他方式是什么意思??
【解决方案2】:

试试这个:

SELECT AVG(Calc)
FROM
(
  SELECT t2.Value/t1.Value AS Calc
  FROM [Table] t1
  JOIN [Table] t2
  ON t1.[Month] = t2.[Month] + 1
) calc

【讨论】:

  • 我运行 SQL 错误消息 208,级别 16,状态 1,第 1 行无效的对象名称“VILIVE”。 (VILIVE 是 mytable)
  • 对不起,我不明白。
  • 我有其他问题,如果我想添加“where month =3”请指导我
【解决方案3】:

试试下面的查询。

            select avg(CAST(a.value as FLOAT)/cast(a.mm as FLOAT)) from
            (
            SELECT *, LAG(value) OVER(ORDER BY MONTH) AS mm FROM #your_table
            ) 
            a where a.mm is not null

如果您有任何疑虑,请告诉我们

【讨论】:

  • 我使用 ms sql 2008,Lag 不是公认的内置函数名。错误。
【解决方案4】:

我想使用查询 SQL:

如果我选择month=3 => result = AVG(value2/value1,value3/value2)-1

如果我选择月份=4 结果 = AVG(value2/value1,value3/value2,value4/value3)-1

谢谢

【讨论】:

    猜你喜欢
    • 2012-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-12-27
    • 2018-04-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多