Mysql 是否从同一SQL表中的不同值中查找百分比差异?
我有一个表格,它跟踪某个特定位置的月份和年份的总值 期望的结果:我想比较一个月今年的价值和去年的价值。然后我想检查一下增加的百分比 e、 g.2014年1月=140-2013年1月=150*100=-6.67 表名-捐赠和U跟踪器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
提前感谢您。这应该会给您一个想法: 样本数据:
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。谢谢你的分解。谢谢你的分解。