简体   繁体   English

MySQL数据透视表计数

[英]MySQL pivot table counting

I've three tables: 我有三张桌子:

users
------
user_id
name

subjects
--------
subject_id
name

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

I've this query to show subjects and usernames: 我有这个查询来显示主题和用户名:

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;

and works great. 并且效果很好。 but now I need to show how many subjects an user has. 但现在我需要显示用户有多少门科目。

Example output: 输出示例:

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

Any idea about how can I accomplish that output only with SQL queries? 关于如何仅通过SQL查询如何完成输出的任何想法? Thanks. 谢谢。

Try this 尝试这个

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 SQL小提琴

If c.name is separated by , or it is just one subject or it is just null , you may try following;) 如果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;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM