2016-04-14 121 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