2017-10-17 13 views
0

MYSQLでクエリを記述しようとしています。私はstudent_dataと呼ばれるテーブルを持っています。 4列あります。クエリは、マップの一覧でmysqlからデータを取得する

student_data_id 
student_id 
course_name 
registerd_time 

私は各生徒に登録されたコースを取得しようとしています。私は次のクエリを使用しました。

2224508  Java 
2224508  Salesforce 
2224508  Unix 
22260211 Java 
22260211 Salesforce 
22260211 VBScript 

私はこの形式で出力取得しようとしています:

2224508  Java,Salesforce,Unix 
22260211 Java,Salesforce,VBScript 

どのように取得するクエリまたはJDBCテンプレートを書くために、私は次の出力を取得しています

select 
    student_id,course_name from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id,course_name; 

上記のフォーマット?

答えて

1

これを試してみてください -

select student_id 
     ,GROUP_CONCAT(course_name) 
from student_data 
where student_id IN(2224508, 22260211) 
and course_name IN('Java','Salesforce','Unix','VBScript') 
and registered_time > NOW() - INTERVAL 1 DAY 
group by student_id; 
+0

それは私のために働いた。迅速な返信をありがとうございました。 – madhu

1

あなたはGROUP_CONCAT()を使ってこれを実現することができます

select 
    student_id,group_concat(course_name) 
from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id; 
+0

それは働いた。どうもありがとうございます。 – madhu

2

関数GROUP_CONCATは、デフォルトのセパレータ(この場合はSTUDENT_IDに)

select 
    student_id 
    , GROUP_CONCAT(course_name) 
from student_data 
where 
    student_id IN(2224508,22260211) and 
    course_name IN('Java','Salesforce','Unix','VBScript') and 
    registered_time > NOW() - INTERVAL 1 DAY 
group by student_id; 
をGROUPをconcats
関連する問題