SQL查询求助:关联表并基于平均分生成测试难度列
解决SQL条件生成Test Difficulty列的问题
直接在你现有查询的基础上,通过CASE条件语句生成Test Difficulty列即可,无需创建新表。修改后的完整查询如下:
SELECT practice.task_id AS "Test ID", practice.name AS "Test Name", CASE WHEN practice.average < 20 THEN 'hard' WHEN practice.average BETWEEN 20 AND 60 THEN 'medium' ELSE 'easy' END AS "Test Difficulty" FROM ( SELECT reports.task_id, tasks.name, AVG(reports.score) AS average FROM reports JOIN tasks ON tasks.id = reports.task_id GROUP BY reports.task_id, tasks.name ) practice;
关键说明
CASE是SQL原生的条件判断语法,能直接在查询中根据计算出的平均分动态生成难度值。- 你可以根据题目具体要求调整
CASE里的阈值和对应难度文本,比如如果要求平均分≤20时为"hard",只需把第一个条件改成WHEN practice.average <= 20 THEN 'hard'。 - 通过列别名
AS将结果列名调整为题目要求的Test ID、Test Name、Test Difficulty。
验证数据结果
根据你提供的测试数据,运行上述查询会得到如下结果:
| Test ID | Test Name | Test Difficulty |
|---|---|---|
| 101 | MinDist | easy |
| 123 | Equi | medium |
| 142 | Median | medium |
| 300 | Tricoloring | medium |
内容的提问来源于stack exchange,提问作者abc102493
相关产品推荐
相关产品推荐

