查詢所有成績高於平均成績的學生的SQL查詢
給定的任務是使用SQL查詢所有成績高於平均成績的學生。例如,如果一個班級的學生成績為65、75、89、92和60,那麼平均成績將是76.2,查詢應該返回成績為89和92的記錄。讓我們一步一步開始。
建立表格
首先,我們需要使用**CREATE**語句建立一個名為**Students**的表格。此表包含三列:**Student_Id**、**Subject**和**Marks**。此表儲存三種類型的科目,分數範圍為0到100。
CREATE TABLE Students( Student_Id INT NOT NULL, Subject VARCHAR (20) NOT NULL, Marks INT NOT NULL );
填充表格
讓我們使用**INSERT INTO**語句將記錄插入此表,如下所示:
INSERT INTO (Student_Id, Subject, Marks ) Students VALUES (1, 'Math', 75), (2, 'Math', 82), (3, 'Math', 95), (4, 'English', 67), (5, 'English', 78), (6, 'English', 88), (7, 'Science', 100), (8, 'Science', 92), (9, 'Science', 79);
顯示資料
現在,讓我們使用**SELECT**查詢顯示這9條記錄。
SELECT * FROM Students;
執行此查詢後,將顯示所有9條記錄及其3列,如下所示:
學生ID | 科目 | 分數 |
---|---|---|
1 | 數學 | 75 |
2 | 數學 | 82 |
3 | 數學 | 95 |
4 | 英語 | 67 |
5 | 英語 | 78 |
6 | 英語 | 88 |
7 | 科學 | 100 |
8 | 科學 | 92 |
9 | 科學 | 79 |
查詢平均分數
現在,讓我們找出9名學生的平均分數。這可以透過以下查詢完成:
SELECT AVG(marks) as Average_Marks from Students;
以下是此查詢的輸出:
84
現在,讓我們使用**WHERE**子句檢索所有選修科學科目的學生的Student_Id和Marks。
SELECT Student_Id, Marks FROM Students WHERE subject in ('Science');
輸出
學生ID | 分數 |
---|---|
7 | 100 |
8 | 92 |
9 | 79 |
使用子查詢計算平均分數
子查詢是在另一個查詢中巢狀的查詢。它用於執行中間計算,以進行簡單的複雜計算,例如聚合、篩選等。以下是使用它的示例模板。
SELECT column1, column2, ... FROM table1 WHERE column_name operator (SELECT column_name FROM table2 WHERE condition);
這稱為子查詢,其中“SELECT column_name FROM table2 WHERE condition”巢狀在另一個查詢中。讓我們將上面從步驟2到5的所有步驟組合起來,編寫我們的最終查詢。
SELECT student_id, subject, marks FROM student WHERE marks > (SELECT AVG(marks) FROM student);
輸出
學生ID | 科目 | 分數 |
---|---|---|
3 | 數學 | 95 |
6 | 英語 | 88 |
7 | 科學 | 100 |
8 | 科學 | 92 |
讓我們分解此查詢:
- 子查詢計算Students表中所有學生的平均分數。
(SELECT AVG(marks) FROM students)
- 此查詢在系統內部將以這種方式查詢:
SELECT Student_Id, Subject, Marks FROM Students WHERE marks > 84;
- 現在,“WHERE”子句過濾行,僅包含分數高於平均分數(在本例中為84)的學生。最後,它將顯示所有分數高於84的學生的姓名,如上所示。
感謝您閱讀本教程!我們希望您現在對在SQL任務中應用WHERE子句和子查詢感到興奮和自信。您已準備好開始在日常的專業和個人專案中使用這些強大的工具。祝您查詢愉快,並享受發現數據可以揭示的見解!
廣告