진짜 개발자
본문 바로가기

Database/Mysql

Mysql - group by, having, max(count), inner query 예제 (가장 많이 조회된 글의 번호 구하기)

728x90
가장 많이 조회된 글 번호 구하기 쿼리 예제

이번 포스팅에는 가장 많이 조회된 글의 번호를 구하는 쿼리를 알아보도록 하겠습니다.

 

1. Table

사용할 테이블의 스키마 입니다. no는 외래키이며 post(게시판) 테이블의 기본키로 글 번호를 뜻합니다. post_statistic테이블의 기본키는 no, access_date(합성키) 입니다.

 

이런식으로 글 번호마다 언제 조회를 했는지를 저장하는 테이블입니다.

 

 

 

2. 가장 많은 조회수를 가지는 글번호(no) 구하기

2.1 no별 조회수 구하기 (Group by)

우선 각 no 별 조회수를 구하기 위해 group by 를 이용하여 쿼리를 작성합니다.

 

( group by를 사용해야 하는 경우 - https://wkdtjsgur100.github.io/groupby-having/ )


 

2.2 no별 조회수 중 가장 많은 조회수 구하기 (inner query)

 

그 다음 앞서 no별 조회수를 구하는 쿼리를 하위 쿼리로 하여 max(mycount) 를 조회합니다. 이때 하위 쿼리에는 꼭 별칭을 주어야 합니다.

 

그렇지 않은 경우 위와 같은 error가 나타납니다.

 

 

 

2.3 가장 많은 조회수를 가지는 no 구하기 (having)

여기서 많이 헤메다 결국 google의 도움을 받았습니다. (참고 https://www.w3resource.com/sql/aggregate-functions/max-count.php)

 

해결방법을 간단히 설명드리자면 no별 조회수를 구하는 query의 having절에 count(*) = 가장 많은 조회수(count) 조건을 주시면 됩니다.

 

앞서서 no별 조회수를 구하는 쿼리는 위와 같았습니다.

 

여기서 having절에 위와 같이 조건을 주게 된다면 가장 많은 조회수를 가지는 no을 얻을 수 있습니다. 하지만 문제는 가장 많은 조회수를 가지는 수를 위처럼 숫자가 아닌 쿼리를 적어주어야 한다는 것입니다.

 

그러나 우리는 이미 가장 많은 조회수를 구하는 방법을 알아 냈습니다. 이것을 이용해 having 조건을 준다면 원하는 no을 얻어낼 수 있습니다.

 

성공입니다.