查询从地图列表中的mysql检索数据

时间:2017-10-17 13:57:17

标签: mysql

我正在尝试在MYSQL中编写查询。我有一个名为student_data的表。它有4列。

student_data_id
student_id
course_name
registerd_time

我正在尝试检索为每个学生注册的课程。我使用了以下查询。

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;

我得到以下输出:

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

我试图以这种格式获得输出:

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

如何编写查询或JDBC模板以获得上述格式?

3 个答案:

答案 0 :(得分:2)

函数GROUP_CONCAT将GROUP(在本例中为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;

答案 1 :(得分: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;

答案 2 :(得分: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;