簡體   English   中英

MYSQL-GROUP_CONCAT僅顯示重復項

[英]MYSQL - GROUP_CONCAT show duplicates only

我有2個SQL表。

  1. 第一個表具有部門ID到學生ID的映射。 (一個學生可能屬於多個部門,一個部門有很多學生)。
  2. 第二張桌子繪制了學生及其愛好的地圖。 (也有多對多的關系)

表的示例快照:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM