Mysql 是否从同一SQL表中的不同值中查找百分比差异?

Mysql 是否从同一SQL表中的不同值中查找百分比差异?,mysql,Mysql,我有一个表格,它跟踪某个特定位置的月份和年份的总值 期望的结果:我想比较一个月今年的价值和去年的价值。然后我想检查一下增加的百分比 e、 g.2014年1月=140-2013年1月=150*100=-6.67 表名-捐赠和U跟踪器 提前感谢您。这应该会给您一个想法: 样本数据: CREATE TABLE t (`month` varchar(3), `year` int, `amount` int) ; INSERT INTO t (`month`, `year`, `amo

我有一个表格,它跟踪某个特定位置的月份和年份的总值

期望的结果:我想比较一个月今年的价值和去年的价值。然后我想检查一下增加的百分比

e、 g.2014年1月=140-2013年1月=150*100=-6.67

表名-捐赠和U跟踪器


提前感谢您。

这应该会给您一个想法:

样本数据:

CREATE TABLE t
    (`month` varchar(3), `year` int, `amount` int)
;

INSERT INTO t
    (`month`, `year`, `amount`)
VALUES
    ('jan', 2013, 150),
    ('feb', 2013, 180),
    ('jan', 2014, 140),
    ('feb', 2014, 160)
;
查询:

select
t1.month, round((t2.amount - t1.amount) * 100 / t1.amount, 2)
from
t t1
inner join t t2 on t1.month = t2.month and t1.year < t2.year;

这应该给你一个想法:

样本数据:

CREATE TABLE t
    (`month` varchar(3), `year` int, `amount` int)
;

INSERT INTO t
    (`month`, `year`, `amount`)
VALUES
    ('jan', 2013, 150),
    ('feb', 2013, 180),
    ('jan', 2014, 140),
    ('feb', 2014, 160)
;
查询:

select
t1.month, round((t2.amount - t1.amount) * 100 / t1.amount, 2)
from
t t1
inner join t t2 on t1.month = t2.month and t1.year < t2.year;

假设您需要逐月比较立即完成的12个月与之前的12个月。我在猜测你的表名和列名,因为我不知道它们

让我们从头开始

这里的查询将逐月查找最近12个月的捐款

SELECT YEAR(donation_date) AS donation_year, 
       MONTH(donation_date) AS donation_month,
       SUM(donation_amount) AS donation_amount
  FROM donations
 WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
   AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
 GROUP BY YEAR(donation_date), MONTH(donation_date) 
诀窍是选择正确的日期值范围

因此,现在您需要两个结果集,一个用于2014年大部分时间,另一个用于2013年大部分时间。2013年下半年的情况看起来非常相似。你只需像这样再备份一年

SELECT YEAR(donation_date) AS donation_year, 
       MONTH(donation_date) AS donation_month,
       SUM(donation_amount) AS donation_amount
  FROM donations
 WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 25 MONTH
   AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
 GROUP BY YEAR(donation_date), MONTH(donation_date) 
这是整个俱乐部三明治供你的服务员细细咀嚼。好吃

SELECT a.donation_month, 
       a.donation_amount AS this_year, 
       b.donation_amount AS last_year,
       100.0 * (a.donation_amount - b.donation_amount) / b.donation_amount as pct_increase
  FROM (
        SELECT YEAR(donation_date) AS donation_year, 
               MONTH(donation_date) AS donation_month,
               SUM(donation_amount) AS donation_amount
          FROM donations
         WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
           AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL  1 MONTH
         GROUP BY YEAR(donation_date), MONTH(donation_date) 
       ) AS a 
  JOIN (
        SELECT YEAR(donation_date) AS donation_year, 
               MONTH(donation_date) AS donation_month,
               SUM(donation_amount) AS donation_amount
          FROM donations
         WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 25 MONTH
           AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
         GROUP BY YEAR(donation_date), MONTH(donation_date) 
       ) AS b ON a.donation_month = b.donation_month 
  ORDER BY a.donation_year, a.donation_month

一旦你把整个俱乐部三明治叠起来,看起来就很复杂了。但它实际上是一堆简单的子查询。

假设您需要逐月比较立即完成的12个月与之前的12个月。我在猜测你的表名和列名,因为我不知道它们

让我们从头开始

这里的查询将逐月查找最近12个月的捐款

SELECT YEAR(donation_date) AS donation_year, 
       MONTH(donation_date) AS donation_month,
       SUM(donation_amount) AS donation_amount
  FROM donations
 WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
   AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 1 MONTH
 GROUP BY YEAR(donation_date), MONTH(donation_date) 
诀窍是选择正确的日期值范围

因此,现在您需要两个结果集,一个用于2014年大部分时间,另一个用于2013年大部分时间。2013年下半年的情况看起来非常相似。你只需像这样再备份一年

SELECT YEAR(donation_date) AS donation_year, 
       MONTH(donation_date) AS donation_month,
       SUM(donation_amount) AS donation_amount
  FROM donations
 WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 25 MONTH
   AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
 GROUP BY YEAR(donation_date), MONTH(donation_date) 
这是整个俱乐部三明治供你的服务员细细咀嚼。好吃

SELECT a.donation_month, 
       a.donation_amount AS this_year, 
       b.donation_amount AS last_year,
       100.0 * (a.donation_amount - b.donation_amount) / b.donation_amount as pct_increase
  FROM (
        SELECT YEAR(donation_date) AS donation_year, 
               MONTH(donation_date) AS donation_month,
               SUM(donation_amount) AS donation_amount
          FROM donations
         WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
           AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL  1 MONTH
         GROUP BY YEAR(donation_date), MONTH(donation_date) 
       ) AS a 
  JOIN (
        SELECT YEAR(donation_date) AS donation_year, 
               MONTH(donation_date) AS donation_month,
               SUM(donation_amount) AS donation_amount
          FROM donations
         WHERE donation_date >= LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 25 MONTH
           AND donation_date <  LAST_DAY(NOW()) + INTERVAL 1 DAY - INTERVAL 13 MONTH
         GROUP BY YEAR(donation_date), MONTH(donation_date) 
       ) AS b ON a.donation_month = b.donation_month 
  ORDER BY a.donation_year, a.donation_month

一旦你把整个俱乐部三明治叠起来,看起来就很复杂了。但它实际上是一堆简单的子查询。

据我所知,您需要获取某个特定位置的同一月份从去年到今年的增长百分比。使用查询

SELECT D1.month, ROUND((D2.Donation_amount- D1.Donation_amount) * 100 / 
       D1.Donation_amount, 2)
FROM       donation_tracker D1
INNER JOIN donation_tracker D2 
ON d1.month = D2.month AND D1.year = D2.year - 1 
                       AND D1.Location_ID = D2.Location_ID;

据我所知,您希望得到某个特定位置同一月份从去年到今年的增长百分比。使用查询

SELECT D1.month, ROUND((D2.Donation_amount- D1.Donation_amount) * 100 / 
       D1.Donation_amount, 2)
FROM       donation_tracker D1
INNER JOIN donation_tracker D2 
ON d1.month = D2.month AND D1.year = D2.year - 1 
                       AND D1.Location_ID = D2.Location_ID;

您使用的是MySQL还是Sql Server?您已经标记了这两个。哦,只是MySQL。我不是要单击Sql-Server。您使用的是MySQL还是Sql-Server?你已经标记了这两个。哦,只是MySQL。我不是想点击Sql-Server。谢谢你的分解。谢谢你的分解。