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.
สมมติว่าคุณมีตารางชื่อโรงเรียนซึ่งมีคอลัมน์ ```school_id```, ```school_name```, ```district_id``` และจำนวนนักเรียน คุณต้องเขียนแบบสอบถามเพื่อแสดงรายชื่อโรงเรียนควบคู่ไปกับรหัสเขตและจำนวนนักเรียนโดยเฉลี่ยต่อโรงเรียนในเขตนั้น ตรรกะของคุณอาจเป็นดังนี้: สร้างตารางที่มีรายชื่อเขตและจำนวนนักเรียนโดยเฉลี่ยต่อโรงเรียนที่สอดคล้องกัน เข้าร่วมตารางนี้พร้อมกับรายชื่อโรงเรียนและแสดงข้อมูลที่จำเป็น วางตารางจำนวนนักเรียนโดยเฉลี่ยต่อโรงเรียนในแต่ละเขต หากคุณใช้ CTE (Common Table Expression) คุณไม่จำเป็นต้องสร้างและวางตาราง คุณสามารถอ้างอิงชุดผลลัพธ์ชั่วคราวที่สร้างขึ้นโดยการสืบค้น "WITH" ได้ ดังที่คุณเห็นด้านล่าง: ``` WITH avg_students AS ( SELECT District_id, AVG(students) as Average_students FROMschool GROUP BY District_id) SELECT s.school_name, s. District_id, avg.average_students จากโรงเรียน เข้าร่วม avg_students avg ON s.district_id = avg.district_id; ``` ดังนั้น ให้คุณเริ่มต้นด้วยการกำหนดชุดผลลัพธ์ชั่วคราว ```avg_students``` ในแบบสอบถาม "WITH" ในวงเล็บจะมีคำสั่ง "SELECT" ที่กำหนดชุดผลลัพธ์นี้ ประกอบด้วยรายชื่อเขตและจำนวนนักเรียนโดยเฉลี่ยต่อโรงเรียน หลังวงเล็บปิด คุณจะเริ่มคำสั่งหลัก "SELECT" โปรดสังเกตว่าคุณอ้างอิงชุดผลลัพธ์ชั่วคราวเหมือนกับตารางทั่วไป โดยใช้ชื่อที่กำหนด (```avg_students```) ผลลัพธ์จะประกอบด้วยชื่อโรงเรียน รหัสเขต และจำนวนนักเรียนโดยเฉลี่ยในเขตนี้ | ชื่อโรงเรียน | เขต_id | เฉลี่ย_นักเรียน | | --- | --- | --- | | เด็กมีความสุข | 2 | 238 | | สมาร์ท | 2 | 238 | | อาทิตย์ | 5 | 176 | | มอนเตสซอรี่ | 5 | 176 | เนื่องจากไม่สามารถใช้ในการสืบค้น SQL อื่นๆ ได้ ชุดผลลัพธ์ชั่วคราวจึง "ถูกทิ้ง" แน่นอนคุณสามารถกำหนดอีกครั้งได้หากต้องการ
spam fails_task lang_mismatch pii not_appropriate hate_speech sexual_content quality toxicity humor helpfulness creativity violence