我遇到循环问题,我必须比较不同表之间的列。
我有两张表year2004
和year2005
。两者都包含月份数和该月的金额。我想比较两个表中的金额,并生成第三个表year
,其中包含该月的月数和最大金额。
例如我在2004年 - 100,在2005年 - 200所以我必须返回值(2005,number_of_month,200)。你有什么想法来解决这个问题吗?
PS。对不起我的写作错误,我几年前才学会英语:)
答案 0 :(得分:1)
我猜测你想要在两年内找到每个月最高金额。
如果您的数据全部放在一个monthly_statistics
列date
列中,那么这将会轻松得多。然后它只是一个简单的聚合函数或窗口。
所以让我们将两个表合为一个。
给出样本数据:
CREATE TABLE year2004 ( month int primary key, amount int);
INSERT INTO year2004 (month, amount)
VALUES (1, 50), (2, 40), (3, 60), (4, 80), (5, 100), (6, 800), (7, 20), (8, 40), (9, 30), (10, 40), (11, 50), (12, 99);
CREATE TABLE year2005 ( month int primary key, amount int);
INSERT INTO year2005 (month, amount)
VALUES (1, 88), (2, 44), (3, 11), (4, 123), (5, 12), (6, 88), (7, 21), (8, 19), (9, 44), (10, 89), (11, 4), (12, 42);
我们可以加入表格,也可以按日期将其转换为单个表格,然后对其进行过滤。以下是我们如何使用内容生成单个表:
SELECT DATE '2004-01-01' + month * INTERVAL '1' MONTH AS sampledate, amount
FROM year2004
UNION ALL
SELECT DATE '2005-01-01' + month * INTERVAL '1' MONTH, amount
FROM year2005;
如果您打算创建一个新表,那就是您要使用的内容,但如果您不关心实际日期,只关注几个月,您可以简单地将两个表联合起来:
WITH samples AS (
SELECT month, amount
FROM year2004
UNION ALL
SELECT month, amount
FROM year2005
)
SELECT month, max(amount) AS amount
FROM samples
GROUP BY 1
ORDER BY month;
samplemonth | amount
-------------+--------
5 | 123
11 | 89
1 | 99
2 | 88
3 | 44
9 | 40
4 | 60
6 | 100
10 | 44
12 | 50
7 | 800
8 | 21
(12 rows)