Curving Grades 2
You're a backend engineer working on an online education platform similar to Khan Academy, called "Con Academy".
You're still writing the software that grades on a curve that we started in Curving Grades 1.
The grades are in the grades table, and classes are in the classes table.
| column_name | type | reference |
|---|---|---|
id | VARCHAR | NULL |
subject | VARCHAR | NULL |
name | VARCHAR | NULL |
semester | VARCHAR | NULL |
teacher_id | VARCHAR | teachers.id |
| column_name | type | reference |
|---|---|---|
score | NUMERIC | NULL |
student_id | VARCHAR | students.id |
class_id | VARCHAR | classes.id |
We are using percentiles to assign letter grades based on the following ranges:
| Grade | Range |
|---|---|
| A | 100 - 80% |
| B | 80 - 50% |
| C | 50 - 25% |
| D | 25 - 10% |
| F | 10 - 0% |
Now that we know about PARTITION BY, we can write a comprehensive query.
For all classes, select each student's numerical score, student_id, the class name from classes.name (NOT class_id),
and letter_grade based on their percentile within each class.
Order the grades by class name alphabetically, then by highest score.
If 2 students in the same class have the same exact score, order the lower student_ids first.