반응형
MIN() 함수를 사용한 MySQL의 잘못된 결과
질문:.
이 예에서 우리는 1교 5명의 학생들의 성적을 가지고 있습니다.우리는 어떤 학생이 가장 낮은 점수를 받았는지 알고 싶다.
우리는 학생번호 4번을 받기를 기대했지만 SQL이 학생번호 1을 반환한다.
누가 나 좀 도와줄래?잘 부탁드립니다
표 1:
CREATE TABLE `table1` (
`school_id` int(11) unsigned NOT NULL,
`student_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`grade` int(11) unsigned NOT NULL,
PRIMARY KEY (`student_id`)
) ENGINE=InnoDB AUTO_INCREMENT=6 DEFAULT CHARSET=utf8;
데이터:
INSERT INTO `table1` (`school_id`, `student_id`, `grade`)
VALUES
(1, 1, 20),
(1, 2, 15),
(1, 3, 18),
(1, 4, 12),
(1, 5, 15);
SQL 쿼리:
SELECT t1.`school_id`, t1.`student_id`, MIN(t1.grade)
FROM table1 as t1
WHERE t1.`school_id`=1
GROUP BY t1.`school_id`;
인쇄 화면:
SELECT * FROM table1 ORDER BY grade LIMIT 1
각 학교에서 성적이 가장 안 좋은 학생을 원한다면 그건...
SELECT x.*
FROM table1 x
JOIN
( SELECT school_id
, MIN(grade) grade
FROM table1
GROUP
BY school_id
) y
ON y.school_id = x.school_id
AND y.grade = x.grade;
http://sqlfiddle.com/ #!9/f44cb2/1
@tadman의 조언으로 해결책을 생각해냈습니다.
이 문제에 대해 알게 된 경우 아래에 기재되어 있습니다.
우리는 왜 제한을 사용해야 하는지 이해하지 못했다.한계선을 뺄 경우 잘못된 결과를 얻을 수 있습니다.
SELECT t2.`school_id`, t2.`student_id`, t2.grade
FROM
(
SELECT t1.`school_id`, t1.`student_id`, t1.grade
FROM table1 as t1
WHERE t1.`school_id`=1
ORDER BY t1.`grade` ASC
limit 4294967295
)
as t2
GROUP BY t2.`school_id`;
고객님의 문제에 대해 더 이상의 요구사항이 없는 한, 다음과 같은 방법으로 해결하실 수 있습니다.
select t1.school_id, t1.student_id, t1.grade
from table1 as t1,
(select school_id, min(grade) as grade from table1 group by school_id) as t2
where t1.school_id=t2.school_id
and t1.grade=t2.grade;
언급URL : https://stackoverflow.com/questions/37263412/mysql-wrong-result-using-min-function
반응형
'source' 카테고리의 다른 글
PHP CURL에서 POST에서 GET으로 전환하는 방법 (0) | 2022.09.11 |
---|---|
mod_rewrite가 php에서 활성화 되어 있는지 확인하는 방법 (0) | 2022.09.11 |
Grunt, NPM 및 Bower의 차이(패키지).json vs bower.json) (0) | 2022.09.11 |
JavaScript의 eval()이 나쁜 것은 언제입니까? (0) | 2022.09.11 |
아름다운 수프와 아이디로 디바와 내용물을 추출 (0) | 2022.09.11 |