에티테마

group by 에서 다중 레코드 중에서 순위(순서) 출력하기

페이지 정보

작성자 소프트존 쪽지보내기 메일보내기 자기소개 아이디로 검색 전체게시물 댓글 0건 작성일 20-08-12 05:12

본문

MySQL에서 여러 필드를 기반으로 중복 행을 찾는 방법이라고 보시면 됩니다.

group by 에서 다중으로 그룹화해서 순위를 뽑기에는 항상 애매한 구석이 많습니다.
여러가지 컬럼의 레코드 중에서 2가지 이상의 컬럼을 검색해서 제일 많은 순서대로 출력을 시켜줘야 합니다.

그누보드를 사용하여 데이터베이스에서 추천수가 가장 많은것을 출력하도록 하겠습니다.

e7497a179e4f1d78401c4ff3b68dc2ae_1597175503_53.JPG
아래처럼 gallery 의 게시판 이름 중에서 wr_id 값중 14 가 5개로 제일 많습니다.
그다음 gallery 에서 wr_id 가 3인 인경우와 free 의 wr_id 가 9인 인 경우가 동일합니다.

SELECT wr_id, bo_table FROM g5_board_good GROUP BY wr_id, bo_table HAVING count(*) > 1

위처럼 입력하게 되면 일단 중복된 값들 중에서 1개 이상인 경우만 출력하기 때문에
gallery 와 wr_id 값 중복된 값을 무조건 다 출력하게 되어 있습니다. 순서는 상관 없습니다. 

그럼 여기서 제일 많은 순서대로 출력하는 방법을 알아 보도록 하겠습니다.

SELECT count(wr_id) as cnt, wr_id, bo_table FROM g5_board_good GROUP BY wr_id, bo_table HAVING count(*) > 1 order by cnt desc

위 내용중에서 count(wr_id) as cnt 처럼 wr_id 의 값의 숫자를 구하게 됩니다.
그다음 맨 뒷쪽을 보시면 별칭(cnt) 기준으로 desc 하게 되면 높은 순서대로 출력이 되게 됩니다.
아래는 결과 입니다.

e7497a179e4f1d78401c4ff3b68dc2ae_1597175961_76.JPG

cnt 값이 들어 갔기 때문에 카운트를 구할 수가 있습니다.
cnt 값 기준으로 DESC 정렬을 해주면 순서대로 정렬이 되겠네요.
그럼 10개만 뽑도록 하겠습니다.

SELECT count(wr_id) as cnt, wr_id, bo_table FROM g5_board_good GROUP BY wr_id, bo_table HAVING count(*) > 1 order by cnt desc LIMIT 10

그누보드에서 전체 게시판중에서 순서대로 10개만 뽑았습니다.
그럼 다음으로 추천순으로 10개만 뽑도록 하겠습니다.

SELECT count(wr_id) as cnt, wr_id, bo_table FROM g5_board_good where bg_flag = 'good' GROUP BY wr_id, bo_table HAVING count(*) > 1 order by cnt desc LIMIT 10

그누보드 추천수 순위대로 10개만 출력했습니다.
비추천수로 뽑으실려면 good 을 nogood 으로 변경해주시면 되겠습니다.











 

  • 트위터로 보내기
  • 페이스북으로 보내기
  • 구글플러스로 보내기

댓글목록

등록된 댓글이 없습니다.