首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在MySQL和MariaDB中使用GROUP和ORDER

在MySQL和MariaDB中使用GROUP和ORDER
EN

Stack Overflow用户
提问于 2015-05-05 08:42:40
回答 1查看 1.8K关注 0票数 3

我有一个表:voj_submission,它的结构如下:

代码语言:javascript
复制
CREATE TABLE IF NOT EXISTS `voj_submissions` (
    `submission_id` bigint(20) NOT NULL,
    `problem_id` bigint(20) NOT NULL,
    `uid` bigint(20) NOT NULL,
    `submission_judge_result` varchar(8) DEFAULT NULL,
) ENGINE=InnoDB AUTO_INCREMENT=1004 DEFAULT CHARSET=utf8;

表中的数据可能如下:

代码语言:javascript
复制
SubmissionID ProblemID UserID JudgeResult
1000         1000      User1   AC
1001         1000      User1   WA
1002         1000      User2   CE
1003         1001      User1   AC

下面的SQL希望得到问题的最新判断结果:

代码语言:javascript
复制
SELECT submission_id, problem_id, submission_judge_result 
FROM (
    SELECT * FROM 
    voj_submissions 
    ORDER BY submission_id DESC 
) s 
WHERE uid = 'User1'
AND problem_id >= 1000
AND problem_id < 1010
GROUP BY problem_id

在MySQL 5.6中,它正常工作,并返回以下结果集:

代码语言:javascript
复制
SubmissionID ProblemID JudgeResult
1001         1000      WA
1003         1001      AC

但是在MariaDB 10.0.14中,它返回:

代码语言:javascript
复制
SubmissionID ProblemID JudgeResult
1000         1000      AC
1003         1001      AC

这意味着ORDER BY DESC没有在MariaDB中执行。我该如何解决这个问题?

参考资料:

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-05-05 09:11:06

@bluefeet在这个post中说过

在子查询中使用ORDER不是解决此问题的最佳方法。 作者获取最大值(Post_date)的最佳解决方案是使用子查询返回最大日期,然后将其连接到post_author和最大值日期的表中。

因此,解决办法应该是:

代码语言:javascript
复制
SELECT submission_id, s1.problem_id, submission_judge_result
FROM voj_submissions  s1
INNER JOIN (
    SELECT MAX(submission_id) AS max_submission_id, problem_id
    FROM voj_submissions
    WHERE uid = 1000
    AND problem_id >= 1000
    AND problem_id < 1010
    GROUP BY problem_id
) s2 
ON s1.problem_id = s2.problem_id
AND s1.submission_id = s2.max_submission_id

这在MariaDB和MySQL中都是有效的。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30048082

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档