SELECT LISTAGG(ft.movieCd ||'|'|| ft.movieNm, ',') WITHIN GROUP (ORDER BY ROWNUM) AS repMovieList
FROM (
SELECT ROWNUM, iv4.*
FROM (
SELECT iv3.peopleNm, iv3.updateDate, iv3.movieCd, iv3.movieNm
,iv3.commaCnt - REGEXP_COUNT(iv3.actorDetail, ',', iv3.peopleIdx) +1 AS actorOrder
,iv3.cntStarRating, iv3.avgStarRating
,iv3.actorDetail
FROM (
SELECT iv2.peopleNm, iv2.updateDate
, m.movieCd, m.movieNm, m.actorDetail
, REGEXP_INSTR(m.actorDetail, iv2.peopleNm) AS peopleIdx
, REGEXP_COUNT(m.actorDetail, ',') AS commaCnt
, COUNT(s.starRating) AS cntStarRating
, ROUND(AVG(s.starRating) , 1) AS avgStarRating
FROM (
SELECT iv1.peopleCd, iv1.peopleNm, iv1.updateDate, REGEXP_SUBSTR(iv1.actorFilmos, '[^,]+', 1, level) actorFilmo
FROM (
SELECT p.peopleCd, p.peopleNm, p.actorFilmos, p.updateDate
FROM tbl_people p
WHERE p.peopleCd=
) iv1
CONNECT BY REGEXP_SUBSTR(iv1.actorFilmos, '[^,]+', 1, level) IS NOT NULL
) iv2
INNER JOIN tbl_movie m
ON (iv2.actorFilmo = m.movieCd)
LEFT OUTER JOIN tbl_starRating s
ON (m.movieCd = s.movieCd)
GROUP BY iv2.peopleNm, iv2.updateDate, m.movieCd, m.movieNm, m.actorDetail
) iv3
WHERE iv3.peopleIdx != 0
ORDER BY actorOrder ASC
) iv4
WHERE ROWNUM BETWEEN 1 AND 10
ORDER BY iv4.cntStarRating DESC, iv4.avgStarRating DESC, iv4.updateDate ASC
) ft
WHERE ROWNUM BETWEEN 1 AND 2
- 참고) LISTAGG()에서 ROWNUM을 기준으로 ORDER BY 했다는 사실 유념할 것.
-> 서브쿼리에서 ORDER BY했던 정렬 순서대로 row 합치기 위함