【问题标题】:SQL - calculate percentage increase in values of a numeric columnSQL - 计算数字列值的百分比增加
【发布时间】:2010-10-13 19:00:27
【问题描述】:

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

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

我不能使用存储过程。

谢谢。

我的表有以下列

日期(数字)、月份(数字)、订单(数字)、价格(实际)

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

【问题讨论】:

  • "有人可以请教我应该怎么做吗?"并非没有有关架构的一些基本信息。

标签: sql sqlite


【解决方案1】:

我不确定 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 位小数,并在末尾附加一个“%”。

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      如果您有一个带有年+月 (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:必须进行除零检查以避免进一步的问题。

      【讨论】:

        【解决方案4】:

        不确定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
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2021-11-01
          • 1970-01-01
          • 1970-01-01
          • 2021-06-30
          • 2023-02-01
          • 2015-06-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多