簡體   English   中英

如何在SELECT查詢中使用count從多個表創建視圖?

[英]How to use count in SELECT query to create a view from multiple tables?

我有一個MySQL表,該表提供了不同學校的學生的詳細信息(如下所示)。 SchoolName定義一所獨特的學校。 同樣, StudentNameStudentId一起唯一地定義了一個學生。

| SchoolName | StudentName |  StudentId |

| ABC        | Tom         |  147852    |
| ABC        | Nix         |  258963    |
| ABC        | Bob         |  898596    |
| XYZ        | Ross        |  369369    |
| XYZ        | Jimmy       |  147852    |

我還有另一個表格,該表格顯示了學生所修課程(如下所示)。 在這里,字符“ X”表示學生已修完該課程。 空白表示他沒有參加那門課程。 假設一個學生只能修一門課程

| StudentName | StudentId | StudiesPhysics |  StudiesMaths |  StudiesChemistry  |

| Tom         | 147852    |                |  X            |                    |
| Nix         | 258963    |   X            |               |                    |
| Bob         | 898596    |                |  X            |                    |
| Ross        | 369369    |                |               |   X                |
| Jimmy       | 147852    |  X             |               |                    |

我想要一個顯示每所學校每門課程學習人數的視圖(示例如下所示)。 請幫助我編寫一個MySql查詢以獲得所需的結果。

| SchoolName | CountPhysics |  CountMaths |  CountChemistry  |

| ABC        | 1            |  2          | 0                |
| XYZ        | 1            |  0          | 1                |
SELECT
SN.SchoolName,
SUM(CASE WHEN C.StudiesPhysics='X' THEN 1 ELSE 0 END ) AS CountPhysics,
SUM(CASE WHEN C.StudiesMaths='X' THEN 1 ELSE 0 END ) AS CountMaths,
SUM(CASE WHEN C.StudiesChemistry='X' THEN 1 ELSE 0 END ) AS CountChemistry
FROM SchoolName AS SN
LEFT JOIN Course AS C
ON SN.StudentId=C.StudentID
GROUP BY SN.SchoolName

使用簡單的計數和分組依據

DECLARE @Table1 TABLE 
    ( SchoolName  varchar(3),  StudentName  varchar(5),  StudentId  int)
;

INSERT INTO @Table1
    ( SchoolName ,  StudentName ,  StudentId )
VALUES
    ('ABC', 'Tom', 147852),
    ('ABC', 'Nix', 258963),
    ('ABC', 'Bob', 898596),
    ('XYZ', 'Ross', 369369),
    ('XYZ', 'Jimmy', 147852)
;




 DECLARE @Table2 TABLE 
    ( Name  VARCHAR(10) ,  Id  INT ,  Physics  VARCHAR(10),  Maths  VARCHAR(10),  Chemistry  VARCHAR(10))
;

INSERT INTO @Table2
    ( Name ,  Id ,  Physics ,  Maths ,  Chemistry )
VALUES
    ('Tom',147852,NULL,'X',NULL),
    ('Nix',258963,'X',NULL,NULL),
    ('Bob',898596,NULL,'X',NULL),
    ('Ross',369369,NULL,NULL,'X'),
    ('Jimmy',147852,'X',NULL,NULL)


    select T.SchoolName,
    COUNT(TT.Physics)Physics,
    COUNT(TT.Maths)Maths,
    COUNT(TT.Chemistry)Chemistry from @Table1 T
    INNER JOIN @Table2 TT
    ON T.StudentId = TT.Id AND TT.Name = T.StudentName
    GROUP BY T.SchoolName

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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