查詢所有成績高於平均成績的學生的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子句和子查詢感到興奮和自信。您已準備好開始在日常的專業和個人專案中使用這些強大的工具。祝您查詢愉快,並享受發現數據可以揭示的見解!

更新於:2024年8月18日

484次瀏覽

開啟您的職業生涯

完成課程獲得認證

開始學習
廣告