我有两张桌子:
ranking_history
| user_id | ranking | time
| 1 | 2 | 2018-05-21
| 1 | 5 | 2018-04-28
| 2 | 9 | 2018-05-21
| 2 | 1 | 2018-04-28
Run Code Online (Sandbox Code Playgroud)
用户
| id | ranking
| 1 | 7
| 2 | 3
Run Code Online (Sandbox Code Playgroud)
我需要连接这两个表来生成一个如下所示的表:
| id | ranking | last_weeks_ranking | last_months_ranking
| 1 | 7 | 2 | 5
| 2 | 3 | 9 | 1
Run Code Online (Sandbox Code Playgroud)
这就是我尝试过的:
SELECT *, r1.ranking as last_weeks_ranking, r2.ranking as last_months_ranking
from user
left join ranking_history r1 on user.id = r1.user_id where r1.time = '2018-05-21'
left join ranking_history r2 on user.id = r2.user_id where r2.time = '2018-04-28'
Run Code Online (Sandbox Code Playgroud)
输出没问题,但我需要连接一个表两次.有没有更简单的方法来做到这一点?
使用条件聚合
SELECT user.id,
MAX(user.ranking) as ranking,
MAX(CASE WHEN r1.time = '2018-05-21' THEN r1.ranking END) as last_weeks_ranking,
MAX(CASE WHEN r1.time = '2018-04-28' THEN r1.ranking END) as last_months_ranking
FROM user
JOIN ranking_history r1
ON user.id = r1.user_id
GROUP BY user.id
Run Code Online (Sandbox Code Playgroud)