안녕하세요. 초보 개발자 석이라고 합니다.
정보들을 읽으면서 많은 도움을 받고있었는데, 두번째 질문을 올리게 되었습니다.
여기서 글을 읽을때마다 정말 대단하신분이 너무나 많다고 느껴집니다...
아래와 같은 테이블의 결과에서 제품별로 리뷰의 숫자가 가변적일때, 특정 숫자를 변수로 받아서 해당 위치의 랭킹과 연결되는 데이터를 추출하고 싶습니다.
제품 | 리뷰 사용자 | 평가 | 랭킹 |
노트북 | A | 9.5 | 1 |
노트북 | B | 8 | 2 |
노트북 | C | 5 | 3 |
데스크탑 | D | 7 | 1 |
데스크탑 | E | 3 | 2 |
1이 입력된다면 => 노트북,A,9.5,1 | 데스크탑,D,7,1
2가 입력된다면 => 노트북,B,8,2,2 | 데스크탑,E,3,2
3이 입력된다면 => 노트북,C,5,3 | 데스크탑,D,7,1 :리스트의 길이가 입력된 변수보다 작을경우 % 연산을 이용...
입력되는 변수는 프로그래밍 레벨에서 섞어서 쿼리로 입력할 계획입니다!
이러한 형태의 결과를 얻고 싶습니다.. 가능한 이슈인지 정확히 모르겠네요..
읽어주셔서 감사합니다.
SELECT a.제품, a.리뷰사용자, a.평가 , COUNT(c.제품) + 1 랭킹 FROM t a INNER JOIN (SELECT 제품 , COUNT(*) cnt FROM t GROUP BY 제품 ) b ON a.제품 = b.제품 LEFT OUTER JOIN t c ON a.제품 = c.제품 AND a.리뷰사용자 != c.리뷰사용자 AND ( (a.평가 < c.평가) OR (a.평가 = c.평가 AND a.리뷰사용자 > c.리뷰사용자) -- 동점인 경우 id 가 작은 사람을 우선 순위로 -- ) GROUP BY a.제품, a.리뷰사용자, a.평가, b.cnt HAVING COUNT(c.제품) + 1 = (:v_랭킹 - 1) % b.cnt + 1 ;