如下有六位 BA(ba_code),属于 2 个级别 ba_level(1 和 2)。写出合适的 SQL 语句,找出考核分数 (ass_score)大于 50, 考核平均分数大于 60 且考核项目平均分数在(item1 和 item2)排名前 2 的 BA,平均分数并列相同的需要一起列出
时间: 2023-02-27 19:47:05 浏览: 159
BA-matlab-code.rar_BA ALGORITHM_ba_ba matlab_code
下面是一个示例 SQL 语句,用来满足上述需求:
```
SELECT ba_code, AVG(ass_score) AS avg_ass_score
FROM table_name
WHERE ass_score > 50
GROUP BY ba_code
HAVING avg_ass_score > 60
AND ba_code IN (
SELECT ba_code
FROM (
SELECT ba_code, AVG(item1) AS avg_item1, AVG(item2) AS avg_item2,
ROW_NUMBER() OVER (ORDER BY AVG(item1) DESC) AS item1_rank,
ROW_NUMBER() OVER (ORDER BY AVG(item2) DESC) AS item2_rank
FROM table_name
GROUP BY ba_code
)
WHERE item1_rank <= 2 OR item2_rank <= 2
);
```
这个 SQL 语句先通过 WHERE 子句筛选出考核分数大于 50 的记录,再用 GROUP BY 子句按 BA 编码分组,最后使用 HAVING 子句筛选出考核平均分数大于 60 且考核项目平均分数排名前 2 的 BA。
其中,在 HAVING 子句中,使用了一个嵌套的 SELECT 语句,该语句算出了每个 BA 的考核项目平均分数排名,最后再根据排名判断是否满足要求。
阅读全文