列「school_id``」、 `` `` school_name``、 `` `` "district_id``、生徒数を備えた学校と呼ばれるテーブルがあるとしましょう。
その地区IDとその地区の学校あたりの生徒の平均数とともに、学校のリストを表示するための質問を書く必要があります。

あなたのロジックは次のとおりかもしれません：

    学校あたりの学生のリストとそれに対応する平均数を含むテーブルを作成します。
    このテーブルを学校のリストに参加させ、必要な情報を表示します。
    各地区の学校あたりの平均生徒数でテーブルを落とします。

CTE（一般的なテーブル式）を使用する場合、テーブルを作成してドロップする必要はありません。以下に示すように、「with」クエリによって作成された一時的な結果セットを単純に参照できます。

`` `
avg_studentsと（
select district_id、avg（desustor）として平均_students
学校から
Group by district_id）
S.School_name、S.District_id、avg.average_studentsを選択します
学校から
AVG_Students Avgに参加します
on s.district_id = avg.district_id;
`` `

したがって、ここでは、「avg_students」を「with query」で一時的な結果セット「avg_students」を定義することから始めます。ブラケットには、この結果セットを定義する「選択」ステートメントがあります。これには、学校ごとの生徒の対応する平均数が含まれています。閉じた括弧の後、メインの「選択」ステートメントを開始します。割り当てられた名前（「avg_students」）を使用して、通常のテーブルのように設定された一時的な結果を参照することに注意してください。出力には、学校名、その地区のID、およびこの地区の平均生徒数が含まれます。


|school_name |District_id |Average_Students |
|--- |--- |--- |
|幸せな子供|2 |238 |
|スマート|2 |238 |
|太陽|5 |176 |
|モンテッソーリ|5 |176 |


他のSQLクエリでは使用できないという意味で、一時的な結果セットは「削除」されます。もちろん、必要に応じて再度定義できます。
Let’s say you have a table called schools with the columns ```school_id```, ```school_name```, ```district_id```, and the number of students.
You need to write a query to display a list of schools alongside their district ID and the average number of students per school in that district.

Your logic might be as follows:

    Create a table with the list of districts and the corresponding average number of students per school.
    Join this table with the list of schools and display the required information.
    Drop the table with the average number of students per school for each district.

If you use a CTE (Common Table Expression), you don’t need to create and drop a table. You can simply reference the temporary result set created by the "WITH" query, like you see below:

```
WITH avg_students AS (
SELECT district_id, AVG(students) as average_students
FROM schools
GROUP BY district_id)
SELECT s.school_name, s.district_id, avg.average_students
FROM schools s
JOIN avg_students avg
ON s.district_id = avg.district_id;
```

So, here you start by defining the temporary result set ```avg_students``` in the "WITH" query. In the brackets, there is a "SELECT" statement that defines this result set; it contains a list of districts and the corresponding average number of students per school. After the closing parenthesis, you start the main "SELECT" statement. Notice that you reference the temporary result set just like an ordinary table, using its assigned name (```avg_students```). The output will include the school name, the ID of its district, and the average number of students in this district. 


| school_name | district_id | average_students |
| --- | --- | --- |
| Happy Kid | 2 | 238 |
| Smart | 2 | 238 |
| Sun | 5 | 176 |
| Montessori | 5 | 176 |


In the sense that it can’t be used in any other SQL queries, the temporary result set is “dropped”. Of course, you can define it again if you need to.