减少同一个表上的连接数

Luv*_*ias 0 mysql pivot join

我有两张桌子:

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)

输出没问题,但我需要连接一个表两次.有没有更简单的方法来做到这一点?

Jua*_*eza 5

使用条件聚合

  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)