2016-06-12 134 views
0

我有三個表:MySQL的數據透視表計數

users 
------ 
user_id 
name 

subjects 
-------- 
subject_id 
name 

pivot_user_subject 
------------------ 
user_id 
subject_id 

我有此查詢展示主題和用戶名:

SELECT a.name User, c.name Subject 
FROM users a, pivot_user_subject b, subjects c 
WHERE a.user_id = b.user_id AND c.subject_id = b.subject_id; 

偉大工程。但現在我需要顯示用戶有多少個主題。

輸出示例:

User  Subjects      Subjects_count 
Juan  Math, Biology, Spanish    3 
Rosa  NULL         0 
Rodrigo Math         1 

我如何能夠做到這僅輸出與SQL查詢的任何想法?謝謝。

+0

請參閱組_CONCAT,但我個人會在應用程序代碼中處理這類事情 – Strawberry

回答

1

試試這個

SELECT u.name, GROUP_CONCAT(s.name), COUNT(s.subject_id) as Subject_count 
FROM users u 
LEFT JOIN pivot_user_subject us ON u.user_id = us.user_id 
LEFT JOIN subjects s ON s.subject_id = us.subject_id 
GROUP BY u.user_id, u.name 

SQL Fiddle

0

如果c.name,分開或者它僅僅是一個主題或者它僅僅是null,您可以嘗試以下;)

SELECT 
    a.name AS User, 
    c.name AS Subjects, 
    IF(c.name IS NULL, 0, LENGTH(c.name) - LENGTH(REPLACE(c.name, ',', '')) + 1) AS Subjects_count 
FROM users a, pivot_user_subject b, subjects c 
WHERE a.user_id = b.user_id AND c.subject_id = b.subject_id;