이번 포스팅에는 가장 많이 조회된 글의 번호를 구하는 쿼리를 알아보도록 하겠습니다.
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을 얻어낼 수 있습니다.
성공입니다.
'Database > Mysql' 카테고리의 다른 글
Mysql - Lock 기본 (0) | 2021.08.18 |
---|---|
Mysql - Mysql 성능 최적화 - 1 (시스템 설정) (0) | 2020.11.09 |
Mysql - Mysql(InnoDB)를 사용할때 성능을 위해 알아야하는 것(Index의 중요성) (4) | 2020.09.06 |
Mysql - 집계함수와(sum, count) Group query 사용법 (GROUP BY, HAVING) (5) | 2019.08.05 |
Mysql - select문 응용 (0) | 2019.04.08 |