【问题标题】:Getting difference between summs求和之间的差异
【发布时间】:2013-04-28 20:54:07
【问题描述】:

我有这个 mysql 查询

SELECT YEAR(date_entered), MONTHNAME(date_entered), SUM(amount)
FROM opportunities
GROUP BY YEAR(date_entered), MONTH(date_entered);

这会带回这些数据

"year(date_entered)","monthname(date_entered)","sum(amount)"
"2009","March","9038714.77"
"2009","April","2205819"
"2009","May","9706852.6"

我需要做的是显示差异?例如三月是 903,四月是 220,所以差值为 680,以此类推,所以最近的总和值减去宝贵的月份值?

提前致谢

【问题讨论】:

  • 如果能保证结果集的顺序,就可以用用户变量“作弊”。否则,您可以将其加入自身,并根据 ON 条件更清晰地计算总和。
  • 有什么理由在 mysql 中这样做?在客户端做这将是微不足道的......

标签: mysql summary


【解决方案1】:

我会使用带有变量的查询,如下所示:

SELECT
  year_entered, month_entered,
  total_amount-@last_sum diff,
  @last_sum:=total_amount total_amount
FROM (
  SELECT
    YEAR(date_entered) year_entered,
    MONTHNAME(date_entered) month_entered,
    SUM(amount) total_amount
  FROM
    opportunities
  GROUP BY
    YEAR(date_entered), MONTH(date_entered)
  ORDER BY
    YEAR(date_entered), MONTH(date_entered)
  ) s,
  (SELECT @last_sum:=null) r

请看小提琴here

【讨论】:

    【解决方案2】:

    试试

    SELECT year_entered, 
           month_entered,
           IFNULL(amount - @n, 0) amount_diff,
           @n := amount current_amount
      FROM
     (SELECT YEAR(date_entered) year_entered, 
             MONTHNAME(date_entered) month_entered, 
             SUM(amount) amount
        FROM opportunities
       GROUP BY YEAR(date_entered), MONTH(date_entered)) q, 
     (SELECT @n := NULL) n
    

    【讨论】:

    • 太棒了。是什么阻止你这样做?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-13
    • 2016-09-20
    • 1970-01-01
    • 2010-10-19
    • 2020-09-15
    • 2014-06-30
    相关资源
    最近更新 更多