我的查询破坏了我网站的某个区域。当试图加载以下 SQL 语句时,站点永远旋转!我对 sql 语句相当陌生,这个特定的语句是由另一位开发人员创建的。有没有办法优化以下语句?或者将它分解成更小的语句以便运行得更快?我不知所措!感谢您的帮助。
SELECT
`wp_quiz_users`.`Id`,
`wp_quiz_users`.`SessionId`,
`wp_quiz_users`.`Score`,
`wp_quiz_users`.`Date`,
`wp_quiz_users`.`Referrer`,
`wp_quiz_users`.`ContactData`,
(SELECT
SUM(`wp_quiz_users_answers`.`AnswerValue`)
FROM
`wp_quiz_users_answers`
JOIN
`wp_quiz_questions`
ON `wp_quiz_users_answers`.`QuestionId` = `wp_quiz_questions`.`id`
WHERE
`wp_quiz_users_answers`.`UserId` = `wp_quiz_users`.`Id`
AND `wp_quiz_questions`.`Category` = 1) AS `SectionOne`,
(SELECT
SUM(`wp_quiz_users_answers`.`AnswerValue`)
FROM
`wp_quiz_users_answers`
JOIN
`wp_quiz_questions`
ON `wp_quiz_users_answers`.`QuestionId` = `wp_quiz_questions`.`id`
WHERE
`wp_quiz_users_answers`.`UserId` = `wp_quiz_users`.`Id`
AND `wp_quiz_questions`.`Category` = 2) AS `SectionTwo`,
(SELECT
SUM(`wp_quiz_users_answers`.`AnswerValue`)
FROM
`wp_quiz_users_answers`
JOIN
`wp_quiz_questions`
ON `wp_quiz_users_answers`.`QuestionId` = `wp_quiz_questions`.`id`
WHERE
`wp_quiz_users_answers`.`UserId` = `wp_quiz_users`.`Id`
AND `wp_quiz_questions`.`Category` = 3) AS `SectionThree`,
(SELECT
SUM(`wp_quiz_users_answers`.`AnswerValue`)
FROM
`wp_quiz_users_answers`
JOIN
`wp_quiz_questions`
ON `wp_quiz_users_answers`.`QuestionId` = `wp_quiz_questions`.`id`
WHERE
`wp_quiz_users_answers`.`UserId` = `wp_quiz_users`.`Id`
AND `wp_quiz_questions`.`Category` = 4) AS `SectionFour`,
(SELECT
SUM(`wp_quiz_users_answers`.`AnswerValue`)
FROM
`wp_quiz_users_answers`
JOIN
`wp_quiz_questions`
ON `wp_quiz_users_answers`.`QuestionId` = `wp_quiz_questions`.`id`
WHERE
`wp_quiz_users_answers`.`UserId` = `wp_quiz_users`.`Id`
AND `wp_quiz_questions`.`Category` = 5) AS `SectionFive`
FROM
`wp_quiz_users`
最佳答案
这个答案类似于 Gordon 的答案,只是它在单独的子查询中对总和执行聚合。这使外部查询无需聚合,因此从 wp_quiz_users
表中选择我们想要的任何列应该没有问题。
SELECT
t1.Id,
t1.SessionId,
t1.Score,
t1.Date,
t1.Referrer,
t1.ContactData,
COALESCE(t2.SectionOne, 0) AS SectionOne,
COALESCE(t2.SectionTwo, 0) AS SectionTwo,
COALESCE(t2.SectionThree, 0) AS SectionThree,
COALESCE(t2.SectionFour, 0) AS SectionFour,
COALESCE(t2.SectionFive 0) AS SectionFive
FROM wp_quiz_users t1
LEFT JOIN
(
SELECT
t1.UserId,
SUM(CASE WHEN t2.Category = 1 THEN t1.AnswerValue ELSE 0 END) AS SectionOne,
SUM(CASE WHEN t2.Category = 2 THEN t1.AnswerValue ELSE 0 END) AS SectionTwo,
SUM(CASE WHEN t2.Category = 3 THEN t1.AnswerValue ELSE 0 END) AS SectionThree,
SUM(CASE WHEN t2.Category = 4 THEN t1.AnswerValue ELSE 0 END) AS SectionFour,
SUM(CASE WHEN t2.Category = 5 THEN t1.AnswerValue ELSE 0 END) AS SectionFive
FROM wp_quiz_users_answers t1
INNER JOIN wp_quiz_questions t2
ON t1.QuestionId = t2.id
GROUP BY t1.UserId
) t2
ON t1.Id = t2.UserId;
关于mysql - 我可以将带有 JOIN 的 SQL 语句分解为更小的查询或优化查询吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47706663/