Mysql SQL中两个表的输出
我正在学习SQL,遇到了下面提到的场景Mysql SQL中两个表的输出,mysql,sql,window-functions,lag,lead,Mysql,Sql,Window Functions,Lag,Lead,我正在学习SQL,遇到了下面提到的场景 Table 1 id Name City 1 Ryan Chennai 2 Tom Banglore 3 Sam Pune 4 Kat Mumbai Table 2 id month salary 1 prev 1000 1 cur 4000 1 next 3000 2 prev 1000 2 cur 3000 2 next 4000 3 prev 2000 3 cur 5000 3 nex
Table 1
id Name City
1 Ryan Chennai
2 Tom Banglore
3 Sam Pune
4 Kat Mumbai
Table 2
id month salary
1 prev 1000
1 cur 4000
1 next 3000
2 prev 1000
2 cur 3000
2 next 4000
3 prev 2000
3 cur 5000
3 next 6000
4 prev 1500
4 cur 2500
4 next 3000
输出表应该如下所示
id name city cur prev next
1 Ryan Chennai 4000 1000 3000
2
3
4
(其他ID也是如此。)
那么实现这一点的不同方法是什么呢?如果有人能帮助我理解如何解决这类问题,那将非常有帮助。首先,我们创建数据
DROP TABLE IF EXISTS table_1;
DROP TABLE IF EXISTS table_2;
CREATE TABLE table_1 (
id INT PRIMARY KEY,
Name VARCHAR(10),
City VARCHAR(10)
);
CREATE TABLE table_2 (
id INT,
month VARCHAR(10),
salary INT);
INSERT INTO table_1
VALUES (1, 'Ryan', 'Chennai'),
(2, 'Tom', 'Banglore'),
(3, 'Sam', 'Pune'),
(4, 'Kat', 'Mumbai');
INSERT INTO table_2
VALUES (1, 'prev', 1000),
(1, 'cur', 4000),
(1, 'next', 3000),
(2, 'prev', 1000),
(2, 'cur', 3000),
(2, 'next', 4000),
(3, 'prev', 2000),
(3, 'cur', 5000),
(3, 'next', 6000),
(4, 'prev', 1500),
(4, 'cur', 2500),
(4, 'next', 3000);
为了获得所需的结果,我们将id
列上的表和sum
列上的表连接到月份
列中,仅考虑所需的值
SELECT t1.name
, t1.city
, SUM(CASE WHEN t2.month = 'cur' THEN salary ELSE 0 END) AS 'cur'
, SUM(CASE WHEN t2.month = 'prev' THEN salary ELSE 0 END) AS 'prev'
, SUM(CASE WHEN t2.month = 'next' THEN salary ELSE 0 END) AS 'next'
FROM table_1 AS t1
INNER JOIN table_2 AS t2
USING (id)
GROUP BY t1.name, t1.city;
我们得到下表:
名称
城市
cur
上
下一个
赖安
钦奈
4000
1000
3000
汤姆
班加罗尔
3000
1000
4000
山姆
浦那
5000
2000
6000
凯特
孟买
2500
1500
3000
你真的不需要使用超前或滞后。这可以使用三个SUM(CASE…)语句和一个group by来完成。为什么只有一行是空的?非常感谢您的解决方案。