2016-04-14 120 views
-1

restult我有一个数据库中的表:Mysql的总和从查询

cou_id | cou_tea_1 | cou_tea_2 | cou tea_3 
    1   1   1   2 
    2   2   1   1 
    3   4   1   1 

每门课程都有一个ID,并cou_tea_1,cou_tea_2,腠tes_3具有在课课程1教导的老师,第二课和第三课。 在这个例子中,课程1中的第一课由老师1完成,第二课由老师1完成,第三课由老师2完成。 我需要一个查询给我老师和他提供的总课程,在这个例子中:

teacher | total_lesson_number 
    1    6 
    2    2 
    4    1 
+0

这是什么问题的现状如何?如果其中一个答案解决了问题,请考虑接受答案,方法是勾选答案旁边的复选标记,直到答案变为绿色。 –

回答

1

这是一个非常贫穷的表设计。通常,当您有多个具有相同名称的列时,您将以列存储值。这些应该是连续的。

你需要做的是unpivot的数据,然后汇总:

select teacher, count(*) as total_lesson_number 
from (select cou_tea_1 as teacher from t union all 
     select cou_tea_2 from t union all 
     select cou_tea_3 from t union all 
     select cou_tea_4 from t 
    ) t 
group by teacher; 

得到这个工作后,你应该在路口表晚自习,所以你知道存储在关系这样的数据的正确方法数据库。

0

您可以使用UNION ALL到UNPIVOT表,然后GROUP BY老师ID:

SELECT teacher, COUNT(*) AS total_lesson_number 
FROM (
    SELECT cou_id, cou_tea_1 AS teacher 
    FROM mytable 

    UNION ALL 

    SELECT cou_id, cou_tea_2 
    FROM mytable 

    UNION ALL 

    SELECT cou_id, cou tea_3 
    FROM mytable) AS t 
GROUP BY teacher 
0

并不是一个新概念,我不想放弃......

select teacher, sum(n) as total_lesson_number from (
    (select cou_tea_1 as teacher, count (*) as n from course group by cou_tea_1) 
    union all 
    (select cou_tea_2 as teacher, count (*) as n from course group by cou_tea_2) 
    union all 
    (select cou_tea_3 as teacher, count (*) as n from course group by cou_tea_3) 
) 
group by teacher