[英]How to use count in SELECT query to create a view from multiple tables?
我有一個MySQL表,該表提供了不同學校的學生的詳細信息(如下所示)。 SchoolName
定義一所獨特的學校。 同樣, StudentName
和StudentId
一起唯一地定義了一個學生。
| 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.