retort 플러그인을 discourse reactions으로 교체할 계획입니다. 어떤 이모지를 사용해야 할지 알아보기 위해 포럼 내 이모지 사용 현황을 확인하고 싶었습니다. 이를 위한 쿼리를 찾지 못해 제가 작성한 쿼리를 공유합니다:
retort 플러그인으로 추가된 이모지 개수
SELECT count(*), REGEXP_MATCHES(key, '([a-z_+]+)|retort') emoji
FROM post_details
WHERE extra = 'retort'
GROUP BY key
ORDER BY 1 DESC
게시물에 포함된 이모지 개수 (시스템 사용자 제외)
SELECT count(*), REGEXP_MATCHES(raw, ' :([a-z_]+): ', 'g') emoji
FROM posts
WHERE user_id > 0
GROUP BY emoji
ORDER BY 1 DESC
좋네요.
REGEXP_MATCHES는 사용해 본 적이 없지만, 방금 테스트를 해 보았습니다(두 번째 쿼리만요. Retort가 설치되어 있지 않아서
).
smiley 대신 GROUP BY emoji를 사용하시는 것이 더 적합할 것 같습니다. 또한 user_id > 1은 원래 관리자(원래 관리자)를 제외하게 됩니다. 의도된 것일 수도 있지만, 참고로 말씀드립니다. 
혹시 다른 분들도 유용하게 볼 수 있을까 해서 Bert
에게 설명을 요청해 보았습니다:
Bert의 설명:
이 쿼리는 posts 테이블에서 각 이모지가 사용된 횟수를 계산하는 데 사용됩니다.
쿼리 구성 요소는 다음과 같습니다:
SELECT count(*), REGEXP_MATCHES(raw, ' :([a-z_]+): ', 'g') emoji: 이 쿼리의 주요 부분입니다. 행의 수(count(*))를 계산하고 정규식(REGEXP_MATCHES)을 사용하여 raw 컬럼에서 이모지를 일치시키고 추출합니다. 정규식 ' :([a-z_]+): '은 콜론(:)으로 시작하고 끝내며 그 사이에 소문자 또는 밑줄이 하나 이상 있는 패턴을 찾습니다. ‘g’ 플래그는 전역적으로 일치한다는 의미로, 첫 번째 일치 항목에서 멈추지 않고 모든 일치 항목을 찾습니다. 일치된 이모지는 emoji로 별칭이 지정됩니다.
FROM posts: 데이터를 가져오는 테이블을 지정하며, 여기서는 posts 테이블입니다.
WHERE user_id > 0: 고려되는 행을 필터링하는 조건입니다. user_id가 0보다 큰 행만 포함됩니다.
GROUP BY emoji: 결과를 emoji 별칭별로 그룹화합니다. 즉, 각 고유한 이모지에 대해 행의 수를 계산합니다.
ORDER BY 1 DESC: 결과 집합의 첫 번째 열(즉, 카운트) 기준으로 내림차순으로 정렬합니다. 이는 가장 자주 사용된 이모지가 먼저 표시되도록 합니다.
요약하자면, 이 쿼리는 user_id가 0보다 큰 게시글에 대해 posts 테이블에서 각 이모지가 사용된 횟수를 계산하고, 가장 자주 사용된 이모지가 먼저 보이도록 결과를 정렬합니다.
아, 맞습니다. 제 사이트에서는 수정해 두었는데 여기서는 깜빡했네요. 
실제로 제 게시물에서 그 점을 언급했어야 했는데 그러지 못했습니다. user_id 1은 (제 사이트에서 익명 게시가 허용되던 시절의) 레거시 사용자 계정으로, 이 사용자는 카운트에 포함시키고 싶지 않았습니다.