2017-04-07 13 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 

を試みたが、いくつかの助けが必要mega_score_master

には存在しないs78c_e4vt6ので、それだけでd47kndffqcために結果を返します。

+1

画像をリンクするのは悪い習慣です。リンクがこの質問を破ると、将来の読者には役に立たないからです。サンプルデータと期待される出力を、代わりに書式付きテキストとして投稿します。 –

答えて

1

ほとんどの場合、inner joinleft 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

Ok IFNULL(column、0) – raju

関連する問題