MySql“;“未知列”;在子查询中
我在“where子句”中得到一个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
未知列“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)求和作为分数并删除更高级别的子查询吗。