MySql“;“未知列”;在子查询中

MySql“;“未知列”;在子查询中,mysql,greatest-n-per-group,Mysql,Greatest N Per Group,我在“where子句”中得到一个未知列“s.UserId”错误 SELECT s.UserId, u.name, COUNT(v.FieldValue) as score_count, ( SELECT SUM(score) FROM ( #Unknown column 's.UserId' in 'where clause' SELECT v2.FieldValue AS `score` FROM submission_values AS v2

我在“where子句”中得到一个
未知列“s.UserId”
错误

SELECT s.UserId, u.name, COUNT(v.FieldValue) as score_count,
(
    SELECT SUM(score) FROM
    (
        #Unknown column 's.UserId' in 'where clause'
        SELECT v2.FieldValue AS `score` FROM submission_values AS v2
        LEFT JOIN submissions AS s2 ON v2.SubmissionId = s2.SubmissionId
        WHERE s2.confirmed = '1' AND v2.FormId = 4 AND v2.FieldName = 'GOLF_SCORE' AND s2.UserId = s.UserId
        ORDER BY v2.FieldValue DESC LIMIT 10
    ) AS `score_sum`
) AS `score_sum`
FROM submission_values AS v
LEFT JOIN submissions AS s ON v.SubmissionId = s.SubmissionId
LEFT JOIN users AS u ON s.UserId = u.id
WHERE s.confirmed = '1' AND v.FormId = '{$formId}' AND v.FieldName = 'GOLF_SCORE'
AND s.DatePlayed >= '2016-02-06 11:18:37'
GROUP BY s.UserId ORDER BY score_sum DESC, score_count DESC LIMIT 20
我知道MySql不支持select部分中的嵌套子查询,但我需要嵌套它来选择每个用户前10名得分的
和。有没有办法修改此查询,使其不是子查询

编辑:以下是一些示例数据

submissions table
--------------------------------------------------
SubmissionId | UserId  | confirmed | DatePlayed
--------------------------------------------------
     1       |   12    |     1     | some date string
     2       |   14    |     1     | some date string
     3       |   12    |     1     | some date string
     4       |   12    |     1     | some date string


submission_values table
-------------------------------------------
 id | SubmissionId | FieldName | FieldValue
-------------------------------------------
  1 |     1        | GOLF_SCORE|  80
  2 |     2        | GOLF_SCORE|  100
  3 |     3        | GOLF_SCORE|  120
  4 |     4        | GOLF_SCORE|  140
预期成果: 我有一个由数百名玩家组成的表格,我想根据前10名玩家的得分总和,创建一个前20名玩家的排行榜

使用迄今为止尝试过的内容进行编辑:

        SELECT s.UserId, u.name, COUNT(v.FieldValue) as score_count,
        SUM(x.FieldValue) AS score_sum FROM
        (
            SELECT s2.*, v2.FieldValue FROM submission_values AS v2
            LEFT JOIN submissions AS s2 ON v2.SubmissionId = s2.SubmissionId
            WHERE s2.confirmed = '1' AND v2.FormId = '{$formId}' AND v2.FieldName = 'GOLF_SCORE'
            GROUP BY v2.SubmissionValueId, s2.SubmissionId
            ORDER BY v2.FieldValue DESC LIMIT 10
        ) AS `x`
        LEFT JOIN submissions AS s ON x.UserId = s.UserId
        LEFT JOIN submission_values AS v ON s.SubmissionId = v.SubmissionId
        LEFT JOIN users AS u ON s.UserId = u.id
        WHERE s.confirmed = '1' AND v.FormId = '{$formId}' AND v.FieldName = 'GOLF_SCORE' AND s.UserId = x.UserId
        AND s.DatePlayed >= '2016-02-06 11:18:37'
        GROUP BY s.UserId ORDER BY score_sum DESC, score_count DESC LIMIT 20

您是否尝试了“submissions.UserId”而不是“s.UserId”…不起作用,未知列submissions.UserIdA子查询用于返回将在主查询中使用的数据。因此,在您的查询中,子查询中的s2.UserId=s.UserId将抛出错误是合乎逻辑的。请粘贴一些示例数据并说明您的预期输出MySQL不支持Select中的嵌套查询。你能把(v2.feildvalue)求和作为分数并删除更高级别的子查询吗。