英文:
Using group by on two tables
问题
Student | Subject name |
---|---|
stB114 | English |
stB114 | English, Urdu |
英文:
I have two tables. One is a subject and the other one is allocated subjects to students. What I need is to use GROUP BY and display all the students in a single column with all subjects.
Table: Subject_Selection
SubjectID | Subject name |
---|---|
ITB001 | English |
ITB002 | Urdu |
ITB003 | Math |
Table: table Student with allocated subjects:
Stdid | subject_id |
---|---|
stB001 | ITB001 |
stB114 | ITB001 |
stB114 | ITB002 |
The Final output I want to use GROUP BY:
Student | Subject name |
---|---|
stB114 | English |
stB114 | English,Urdu |
答案1
得分: 1
你可以使用inner join
来连接数据,然后使用group by
和group_concat
来将数据合并到单列中:
select s.Stdid as Student, group_concat(Subject_name) as 'Subject name'
from Student s
inner join Subject_Selection ss on s.subject_id = ss.SubjectID
group by s.Stdid
备注:这是适用于MySQL/MariaDB的有效解决方案。如果您使用其他的数据库管理系统,您需要将group_concat
更改为等效的函数。
英文:
You can do it using inner join
to join data and group by
with group_concat
to combine data in single column :
select s.Stdid as Student, group_concat(Subject_name) as 'Subject name'
from Student s
inner join Subject_Selection ss on s.subject_id = ss.SubjectID
group by s.Stdid
Ps : this is a working solution for mysql/mariadb
If your are using an other dbms then you have to change group_concat
by an equivalent.
答案2
得分: 0
STEP 1: - 根据 subject_id 将两个表连接,以便获取学生 ID、学科名称和 subject_id 放在一个元组中。
STEP 2: - 只需按学生 ID 进行分组,将特定组中的不同元组连接成一个单一元组...
选择 Stdid 作为学生,group_concat(Subject_name) 作为 'Subject name' 从 Student NATURAL JOIN Subject_Selection 分组按 Stdid;
演示:-
https://dbfiddle.uk/-YoftCWl
我使用了自然连接,因为我在两个表中都将属性名称更改为 SubjectID;否则,您可以使用内连接。
英文:
STEP 1:-JOIN the 2 tables on subject_id so that you get student id and subject name and subject_id on a single tuple.
STEP 2:- just group by student_id and concat the different tuples in a particular group to a single tuple...
select Stdid as Student, group_concat(Subject_name) as 'Subject name' from Student NATURAL JOIN Subject_Selection group by Stdid;
DEMO:-
https://dbfiddle.uk/-YoftCWl
I used natural join since I changed the attribute name to SubjectID in both the tables; otherwise you can use inner join
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论