这是我的疑问:
SELECT
`users`.`id` AS userID,
`user_tests`.`id`,
`users`.`profilePic`,
`users`.`firstName`,
`user_tests`.`userId`,
`user_tests`.`isFirstAttempt`,
`user_tests`.`total_marks`,
FIND_IN_SET(
`user_tests`.`total_marks`,
(
SELECT
GROUP_CONCAT(
DISTINCT `user_tests`.`total_marks`
ORDER BY
CAST(
`user_tests`.`total_marks` AS DECIMAL(5, 3)
)
DESC
)
FROM
`user_tests`
WHERE
`user_tests`.`testSeriesId` = '856' AND `user_tests`.`isFirstAttempt` = '1'
)
) AS rank,
FROM
`user_tests`
LEFT JOIN `users` ON `users`.id = `user_tests`.`userId`
WHERE
`user_tests`.`isFirstAttempt` = '1' AND `user_tests`.`testSeriesId` = '856'
ORDER BY
CAST(
`user_tests`.`total_marks` AS DECIMAL(5, 3)
)
DESC
,
`submissionTimeInMinutes` ASC,
`rank` ASC;
输出量:
this is the image
预期值:
Here is the expected output image
我使用的是MariaDB 5.5.68,我尝试过使用变量来递增,但它显示的是当前行号,而不是1,2,3,4,5 ...数字。
有人能帮忙吗?谢谢。
1条答案
按热度按时间xqnpmsa81#
您似乎不需要左连接,因为没有遗漏任何用户名。一个简单的子查询将按
total_mark
为您提供排名,但我不确定您是在计算用户数还是其他内容。CTE将使您避免重复某些逻辑,甚至可能更快。我不知道您是否有此选择。