2017-04-07 94 views
0

我是mysql新手。我有一個要求,請參閱下面在mysql中獲取2個不同表的結果

grand_score_master 

autoid | user_id | package_id | grand_level | timestamp | timestring 
55  | CBS_00002 | s78c_e4vt6 | 1   | ...  | ... 
58  | CBS_00002 | d47kndffqc | 3   | ...  | ... 
64  | CBS_00002 | d47kndffqc | 1   | ...  | ... 
65  | CBS_00002 | d47kndffqc | 2   | ...  | ... 


mega_score_master 

autoid | user_id | package_id | mega_level | timestamp | timestring 
1  | CBS_00002 | d47kndffqc | 1   | ...  | ... 


expected result 

user_id | package_id | max_grand_leve | max_mega_level 
CBS_00002 | s78c_e4vt6 | 1    | 0 
CBS_00002 | d47kndffqc | 3    | 1 

package_iduser_id是表都是表所示。

我試圖做一個查詢,我將通過爲user_id說「CBS_00002」和查詢將通過匹配/從表都爲用戶分組的共同的package_id返回max(grand_level)max(mega_level)

我想這

SELECT max(grand_score_master.grand_level), 
     grand_score_master.package_id, 
     max(mega_score_master.mega_level) 
FROM grand_score_master 
INNER JOIN mega_score_master 
ON  mega_score_master.package_id = grand_score_master.package_id 
WHERE user_id='CBS_00002' 
GROUP BY grand_score_master.package_id 

但它僅適用於d47kndffqc返回結果因爲s78c_e4vt6沒有出現在mega_score_master

需要一些幫助。

+1

鏈接圖像是不好的做法,因爲如果鏈接被打破,這個問題對未來的讀者是沒有用的。改爲發佈樣本數據和預期輸出以及格式化文本。 –

回答

1

你快到了,你只需要將你的inner join更改爲left join;這會保留所有行從第一個表,無論在第二個或不匹配:

SELECT max(t1.grand_level) max_grand_level, 
     t1.package_id, 
     IFNULL(max(t2.mega_level), 0) max_mega_level 
FROM grand_score_master t1 
LEFT JOIN 
     mega_score_master t2 
ON  t2.package_id = t1.package_id 
WHERE t1.user_id='CBS_00002' 
GROUP BY t1.package_id 

我還添加別名到表中,以便查詢結果更緊湊一點。

+0

親愛的它的工作原理,但有沒有什麼辦法可以將NULL轉換爲0在這個查詢 – raju

+1

好吧,我得到了IFNULL(列,0) – raju