반응형
GROUP BY 및 ORDER BY를 사용한 MySQL 및 MariaDB의 다른 결과 세트
테이블이 있습니다.voj_submission
다음과 같은 구조로 되어 있습니다.
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;
표의 데이터는 다음과 같습니다.
SubmissionID ProblemID UserID JudgeResult
1000 1000 User1 AC
1001 1000 User1 WA
1002 1000 User2 CE
1003 1001 User1 AC
또한 다음 SQL에서는 문제에 대한 최신 판단 결과를 얻으려고 합니다.
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에서는 정상적으로 동작하며 다음 결과 세트를 반환합니다.
SubmissionID ProblemID JudgeResult
1001 1000 WA
1003 1001 AC
그러나 MariaDB 10.0.14에서는 다음과 같이 반환됩니다.
SubmissionID ProblemID JudgeResult
1000 1000 AC
1003 1001 AC
즉,ORDER BY DESC
MariaDB에서 실행되지 않았습니다.어떻게 하면 이 문제를 해결할 수 있을까요?
레퍼런스:
이 투고에서 @bluefeet가 말한 바와 같이:
서브쿼리에서 ORDER BY를 사용하는 것은 이 문제에 대한 최선의 해결책이 아닙니다.
작성자별로 최대(post_date)를 얻는 가장 좋은 방법은 서브쿼리를 사용하여 최대 날짜를 반환하고 post_author와 최대 날짜의 테이블에 결합하는 것입니다.
따라서 해결책은 다음과 같습니다.
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 모두에서 작동합니다.
언급URL : https://stackoverflow.com/questions/30048082/different-resultset-in-mysql-and-mariadb-using-group-by-and-order-by
반응형
'source' 카테고리의 다른 글
Okhttp3 - RequestBody.create(contentType, content)가 폐지되었습니다. (0) | 2023.01.15 |
---|---|
PDO 연결 닫기 (0) | 2023.01.15 |
MySql에서 잘못된 조합 오류입니다. (0) | 2023.01.09 |
MySQL 설정 및 Dockerfile 내 덤프 가져오기 (0) | 2023.01.09 |
빈 어레이 항목을 건너뛰면서 어레이를 삽입하려면 어떻게 해야 합니까? (0) | 2023.01.09 |