count()함수의 최대값 혹은 최대값을 가지는 attribute를 찾는 쿼리문은 다소 까다로울 수 있다.
1. with clause를 이용하여 count()함수의 temp view를 생성한 후, 이를 where절에서 사용하는 방법
2. where 절에서 all >= (select count(attribute) from ... group by ...) 를 사용하는 방법
이렇게 두가지를 사용한다고 배웠다.
하지만 이보다 간편한 방법을 발견하였다.
limit 1 과 order by ... desc 을 이용하는 방법이다.
1. count()의 최대값만을 찾을 경우
select count(course_id) as max
from takes
group by course_id
order by max desc
limit 1;
: course_id 로 group을 묶고 이를 desc으로(큰 값이 제일 위로) 정렬한다.
반환 결과는 limit 1로 제한하여 가장 상단에 있는 값 즉, 최대값만을 출력한다.
2. count()의 최대값을 가지는 attribute만 찾는 경우
select id
from takes
group by course_id
order by count(course_id) desc
limit 1;
: count()함수는 order by절에서만 사용하고 출력결과는 id만 select하여 출력한다. 나머지는 위와 같다.
문제점. limit 1로 제한하였으므로 최대값을 지니는 attribute가 두 개 이상이어도 하나만 출력된다.
Solution. having절을 이용하여 count()의 최대값을 지니는 tuple을 찾는다.
select id
from teaches
group by id
having count(id) = (select count(id)
from teaches
group by id
order by count(id) desc
limit 1);
1. with clause를 이용하여 count()함수의 temp view를 생성한 후, 이를 where절에서 사용하는 방법
2. where 절에서 all >= (select count(attribute) from ... group by ...) 를 사용하는 방법
이렇게 두가지를 사용한다고 배웠다.
하지만 이보다 간편한 방법을 발견하였다.
limit 1 과 order by ... desc 을 이용하는 방법이다.
1. count()의 최대값만을 찾을 경우
select count(course_id) as max
from takes
group by course_id
order by max desc
limit 1;
: course_id 로 group을 묶고 이를 desc으로(큰 값이 제일 위로) 정렬한다.
반환 결과는 limit 1로 제한하여 가장 상단에 있는 값 즉, 최대값만을 출력한다.
2. count()의 최대값을 가지는 attribute만 찾는 경우
select id
from takes
group by course_id
order by count(course_id) desc
limit 1;
: count()함수는 order by절에서만 사용하고 출력결과는 id만 select하여 출력한다. 나머지는 위와 같다.
문제점. limit 1로 제한하였으므로 최대값을 지니는 attribute가 두 개 이상이어도 하나만 출력된다.
Solution. having절을 이용하여 count()의 최대값을 지니는 tuple을 찾는다.
select id
from teaches
group by id
having count(id) = (select count(id)
from teaches
group by id
order by count(id) desc
limit 1);
'공부 이야기 > MySQL5' 카테고리의 다른 글
Chapter3. SQL ('10.10.23) (0) | 2010.10.23 |
---|