SQL - 计算数字列值的百分比增长

时间:2009-03-17 07:53:41

标签: sql sqlite

我想根据我在SQL数据库中获得的值来计算一些趋势。特别是我感兴趣的是在一列中增加值的百分比增加(如果值减少,则值应为负值)

有人可以建议我该怎么做吗?

我无法使用存储过程。

感谢。

我的表格包含以下列

日期(数字),月份(数字),订单(数字),价格(真实)

我想计算从一个月到下一个月收到的订单数量的变化百分比。我也希望方向是一个考虑因素,即如果销售额下降,返回的价值应该是-ve。

4 个答案:

答案 0 :(得分:3)

我不确定sqllite是否允许变量,但这是我在MySQL中的方式。我刚刚测试了它并且像魅力一样工作:100%打印增加10到20,-13.04%打印减少46到40。

希望它在sqllite中类似:

SELECT
  CONCAT(
    FORMAT(
      IF(@prev AND SUM(orders) <> @prev,
          -1 * 100 * (1 - SUM(orders) / @prev),
          0
        )
      , 2)
  , '%') AS variation,
    @prev := SUM(orders) AS orders
FROM
    (SELECT @prev := NULL) init,
    product
GROUP BY
  id_product
ORDER BY
  month

当然,您需要根据需要调整输出。这当前将前置格式设置为2位小数,并在末尾添加“%”。

答案 1 :(得分:1)

为了计算趋势,您需要存储您感兴趣的值的历史数据。

答案 2 :(得分:1)

如果您有一个带有年份+月(YYYYMM)的整数列

,那么这将非常有用
cast(
     cast(year(date) as nvarchar) + 
     replicate('0',2-len(cast(month(date) as nvarchar))) +
     cast(month(date) as nvarchar)
as int)

然后你只需要分组,得到以前的值并计算。

select yearmonth, 
       sum(t.orders), 
       (sum(t.orders)/(select top 1 sum(orders) 
                       from table 
                       where yearmonth<t.yearmonth 
                       group by yearmonth 
                       order by yearmonth desc)-1)*100. as pct 
from table t 
group by yearmonth

T-SQL语法,希望您可以在sqlite中使用

PS:必须进行零检查以避免进一步的问题。

答案 3 :(得分:1)

不确定列Date,但如果每月只有1行,答案可能是(我没有sqlite,但我认为这个答案是ANSI sql):

select t.date
,      t.month
,      t.orders
,      case when t2.orders = 0 then
          99999.0
       else
          100.0 * (t.orders - t2.orders) / t2.orders
       end  "increase"
from   t
left join t t2 on t2.month = t.month - 1
order by t.month