SELECT LM.user_id,LM.users_lineup_id, min( LM.total_score ) AS total_score
FROM vi_lineup_master LM JOIN
vi_contest AS C
ON C.contest_unique_id = LM.contest_unique_id join
(SELECT min( total_score ) as total_score
FROM vi_lineup_master
GROUP BY group_unique_id
) as preq
ON LM.total_score = preq.total_score
WHERE LM.contest_unique_id = 'iledhSBDO' AND
C.league_contest_type = 1
GROUP BY group_unique_id
以上查询是查找每组游戏的输家,查询返回准确的结果但是没有响应大数据。我该如何优化呢?
答案 0 :(得分:0)
您可以尝试将JOIN
移动到子查询。此外,你应该注意你的错误"外部查询的GROUP BY
用法。在Mysql中,您可以按某些列进行分组,并选择未在group子句中指定的其他列而不使用任何聚合函数,但数据库无法确保它将返回给您的数据。为了保证应用程序的一致性,请将它们包装在聚合函数中。
检查这个是否有帮助:
SELECT
MIN(LM.user_id) AS user_id,
MIN(LM.users_lineup_id) AS users_lineup_id,
MIN(LM.total_score) AS total_score
FROM vi_lineup_master LM
WHERE 1=1
-- check if this "contest_unique_id" is equals
-- to 'iledhSBDO' for a "league_contest_type" valued 1
AND LM.contest_unique_id IN
(
SELECT C.contest_unique_id
FROM vi_contest AS C
WHERE 1=1
AND C.contest_unique_id = 'iledhSBDO'
AND C.league_contest_type = 1
)
-- check if this "total_score" is one of the
-- "min(total_score)" from each "group_unique_id"
AND LM.total_score IN
(
SELECT MIN(total_score)
FROM vi_lineup_master
GROUP BY group_unique_id
)
GROUP BY LM.group_unique_id
;
此外,此查询的某些部分可能看似多余,但这是因为我不想更改您编写的过滤器,只是移动它们。
另外,你的查询逻辑对我来说有点奇怪,基于表/列名称以及你如何编写它...请查看我的查询中的注释,它反映了我对你的实现的理解。
希望它有所帮助。