[英]MYSQL - GROUP_CONCAT show duplicates only
I have 2 SQL tables. 我有2个SQL表。
Sample Snapshots of tables: 表的示例快照:
DESC DEPARTMENT_STUDENTS;
----------------------------
DEPT_ID STUDENT_ID
----------------------------
Physics 123
Mathematics 111
Physics 111
CS 45
CS 56
Mathematics 89
DESC STUDENTS_HOBBIES;
-------------------------------
STUDENT_ID HOBBY
-------------------------------
111 Skiing
111 Singing
111 Browsing
123 Singing
123 Browsing
123 Reading
45 Origami
56 Origami
56 Making Prank Calls
89 Reading
I am looking for a query that will provide a list of common hobbies among all the students per department. 我正在寻找一个查询,该查询将提供每个系所有学生之间的共同爱好列表。 Required output would look like :
所需的输出如下所示:
-----------------------------------------
DEPT_ID GROUP_CONCAT(...)
-----------------------------------------
Physics (Singing, Browsing)
Mathematics ()
CS (Origami)
I am almost there and after a little bit of fiddling around with MySQL, I was able to group ALL(not the common ones) the hobbies of a department. 我快到了,经过一点点MySQL的摆弄之后,我就能够将所有(不是普通的)部门的爱好归为一组。 GROUP_CONCAT provides ways to eliminate duplicates also.
GROUP_CONCAT还提供了消除重复项的方法。 One way that I could think of , is to retrieve duplicates programatically over the query below:
我可以想到的一种方法是通过以下查询以编程方式检索重复项:
SELECT DEPT_ID, GROUP_CONCAT(OP.HOBBIES) FROM DEPARTMENT_STUDENTS DS
INNER JOIN (SELECT STUDENT_ID, GROUP_CONCAT(HOBBY)AS HOBBIES FROM STUDENTS_HOBBIES
GROUP BY STUDENT_ID) OP
ON OP.STUDENT_ID = DS.STUDENT_ID
GROUP BY DS.DEPT_ID;
Is there a way to preserve duplicates alone? 有没有办法单独保留重复项? Even in this query, any optimizations are welcome.
即使在此查询中,也欢迎进行任何优化。 Thanks!
谢谢!
Here you go: 干得好:
SELECT DEPT_ID, GROUP_CONCAT(HOBBY) FROM (
SELECT
d.DEPT_ID
, s.HOBBY
FROM
department_students d
INNER JOIN students_hobbies s USING(STUDENT_ID)
GROUP BY d.DEPT_ID, s.HOBBY
HAVING COUNT(DISTINCT s.STUDENT_ID) > 1
)sq
GROUP BY DEPT_ID
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.