Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 获取用户、平均记录和按平均值排名的前5项记录_Mysql_Sql_Average - Fatal编程技术网

Mysql 获取用户、平均记录和按平均值排名的前5项记录

Mysql 获取用户、平均记录和按平均值排名的前5项记录,mysql,sql,average,Mysql,Sql,Average,我有一个用于保存分数的用户记录的表,并且只需要获取作为成员的用户。我需要获得今年每个用户的前5名分数,平均分数并返回前10名用户 注意:用户必须至少有5个条目 评分表: user_id | score | date_submitted 1 99 2017-11-07 22:00:00 2 55 2017-10-33 11:33:35 1 12 2017-09-33 11:33:35 用户表 id | is_memb

我有一个用于保存分数的用户记录的表,并且只需要获取作为成员的用户。我需要获得今年每个用户的前5名分数,平均分数并返回前10名用户

注意:用户必须至少有5个条目

评分表:

user_id | score | date_submitted
   1       99     2017-11-07 22:00:00
   2       55     2017-10-33 11:33:35
   1       12     2017-09-33 11:33:35
用户表

 id | is_member
  1      1
  2      1
  3      0
以下是我到目前为止的情况:

SELECT s.user_id, 
(SELECT AVG(s.score) FROM score s2 WHERE s2.user_id = s.user_id ORDER BY score DESC LIMIT 5) gr 
FROM score s, users u 
WHERE u.id = s.user_id 
AND u.is_member = 1 
AND YEAR(s.date_submitted) = YEAR(CURDATE())
GROUP BY s.user_id 
HAVING COUNT(*) >= 5 
ORDER BY gr DESC LIMIT 10
这将返回:

1242-子查询返回超过1行


我知道这是子查询中的限制,我正在尝试找出如何为该用户获取前5条记录。

您不需要子查询。我还建议使用连接语法:


以下查询将计算每位会员用户本年度前5名得分的平均值,并显示前10名用户:

SELECT     s.user_id, AVG(s.score) gr 
FROM       (select * from score s
            where YEAR(date_submitted) = YEAR(CURDATE())
            and
              (select count(*)
                     from score
                     where user_id = s.user_id
                     and   score>=s.score
              )<=5
           ) s                                     
INNER JOIN users u 
        ON u.id = s.user_id 
       AND u.is_member = 1 
GROUP BY   s.user_id 
HAVING     COUNT(*) >= 5 
ORDER BY   gr DESC 
LIMIT      10;

希望有帮助。

您可以运行子查询并检查记录吗?请添加更多样本数据或为两个表创建并插入查询以测试查询?这将非常有帮助。OP希望根据每个用户的5个最高分计算其平均得分。上面的查询正在计算用户的总体平均分数。
SELECT     s.user_id, AVG(s.score) gr 
FROM       (select * from score s
            where YEAR(date_submitted) = YEAR(CURDATE())
            and
              (select count(*)
                     from score
                     where user_id = s.user_id
                     and   score>=s.score
              )<=5
           ) s                                     
INNER JOIN users u 
        ON u.id = s.user_id 
       AND u.is_member = 1 
GROUP BY   s.user_id 
HAVING     COUNT(*) >= 5 
ORDER BY   gr DESC 
LIMIT      10;