[英]MYSQL - GROUP_CONCAT show duplicates only
我有2個SQL表。
表的示例快照:
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
the students per department. 我正在尋找一個查詢,該查詢將提供每個系學生之間的共同愛好列表。 所需的輸出如下所示:
-----------------------------------------
DEPT_ID GROUP_CONCAT(...)
-----------------------------------------
Physics (Singing, Browsing)
Mathematics ()
CS (Origami)
我快到了,經過一點點MySQL的擺弄之后,我就能夠將所有(不是普通的)部門的愛好歸為一組。 GROUP_CONCAT還提供了消除重復項的方法。 我可以想到的一種方法是通過以下查詢以編程方式檢索重復項:
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;
有沒有辦法單獨保留重復項? 即使在此查詢中,也歡迎進行任何優化。 謝謝!
干得好:
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.