mysql 如何获得有限数量的高于平均水平的不同记录?

2cmtqfgy  于 2023-01-12  发布在  Mysql
关注(0)|答案(2)|浏览(104)

如何让两个不同的记录(包括相同分数的记录)高于平均值?不包括其余记录中的顶部。
这是我的示例表
| 身份证|分数|
| - ------|- ------|
| 一百一十一|八点五十分|
| 一百二十|七点四十五分|
| 一百二十三|九点一三分|
| 一百二十七|七点七零|
| 二百二十二|六点整|
| 二百三十二|七点七七|
| 三二一|六点八零|
| 三四二|六点九零|
| 四百五十三|六点六六|
| 五百六十四|九点零五分|
| 六六六|八点五十分|
| 八七六|八点九零|
首先,我需要弄清楚如何获得平均值。avg(scores) = 7.78
我的预期结果是:
| 身份证|分数|
| - ------|- ------|
| 八七六|八点九零|
| 一百一十一|八点五十分|
| 六六六|八点五十分|
到目前为止我已经尝试过:

select Examinee_number, score
from examinees
where score > 
    (select avg(score)
    from examinees
    order by score
    limit 2);
select Examinee_number, score
from examinees
where score >
    (select avg(score)
    from examinees)
    order by score desc
    limit 2;

平均值应作为评分的参考,以防我只需要获得高于平均值(评分= 8.50)或低于平均值(评分= 7.77)的评分。

a64a0gku

a64a0gku1#

在MySQL 8+中,我们可以使用RANK()分析函数。为了找到除去两个最高分的平均分,我们可以尝试:

WITH cte AS (
    SELECT score, RANK() OVER (ORDER BY score DESC) rnk
    FROM examinees
)

SELECT AVG(score)
FROM cte
WHERE rnk > 2;
iovurdzv

iovurdzv2#

select * from `score` where score > (WITH new AS (select * from `score` where score > (SELECT ROUND(AVG(score), 2) FROM `score`) ORDER BY score limit 2) select AVG(score) from new);

select * from score where score < (SELECT AVG(score) FROM `score`) ORDER BY score;

相关问题