데이터베이스에서 SQL로 `user_stats`의 좋아요 업데이트

여러분, 안녕하세요!

user_stats 테이블에서 likes_given와 likes_received를 업데이트하기 위해 사용할 수 있는 미리 작성된 쿼리를 찾을 수 있는 곳이 있을까요? 이 값이 어디서 가져와야 하는지 확실하지 않은데, 아마도 user_actions와 posts 테이블의 데이터를 기반으로 계산해야 하는 것 같습니다.

이미 몇 가지 쿼리를 가져와서 마이그레이션에 사용하고 있는데, 아마도 어떤 임포터에서 가져온 것 같습니다:

UPDATE posts SET like_count = coalesce(cnt,0)
    FROM (
	SELECT post_id, count(*) cnt
	FROM post_actions
	WHERE post_action_type_id = 2 AND deleted_at IS NULL
	GROUP BY post_id
) x
WHERE posts.like_count <> x.cnt AND posts.id = x.post_id
UPDATE topics SET like_count = coalesce(cnt,0)
  FROM (
	SELECT topic_id, sum(like_count) cnt
	FROM posts
	WHERE deleted_at IS NULL
	GROUP BY topic_id
  ) x
WHERE topics.like_count <> x.cnt AND topics.id = x.topic_id

이 쿼리들은 posts와 topics의 좋아요 수(Like counts)를 업데이트하지만, users_stats에는 업데이트되지 않습니다…

Rails 또는 플러그인을 통해 수행해야 합니다. Data explorer는 데이터를 변경할 수 없습니다.

user 또는 user stats 모델의 코드를 확인해야 합니다.

저는 DBeaver를 사용 중이며 UPDATE 쿼리를 사용할 수 있습니다. "Data explorer"가 또 다른 동등한 DB 클라이언트라고 생각했는데, 혼동을 드려 죄송합니다. 그렇다면 이 내용은 여기에는 맞지 않는 것 같습니다. 관리자가 이 게시글들을 별도의 스레드로 분리하고 싶으시다면 그렇게 하셔도 괜찮습니다. SQL을 통한 user_stats의 좋아요 업데이트와 같은 제목을 제안합니다.

아래와 같은 쿼리를 작성해 보았지만, 이것이 올바른지 확신이 서지 않습니다. 더 잘 아시는 누군가가 이미 작성해 둔 예시를 찾아서 확인하고 싶지만, 어디에서도 찾을 수 없습니다 :slightly_frowning_face:

UPDATE user_stats SET likes_given = coalesce(cnt,0)
    FROM (
   SELECT user_id, count(*) cnt
   FROM post_actions
   WHERE post_action_type_id = 2 AND deleted_at IS NULL
   GROUP BY user_id
) x
WHERE user_stats.likes_given <> x.cnt 
         AND user_stats.user_id = x.user_id
UPDATE user_stats SET likes_received = coalesce(cnt,0)
     FROM (
	SELECT posts.user_id, SUM(posts.like_count) cnt
	FROM post_actions
	LEFT JOIN posts ON post_actions.post_id = posts.id
	WHERE post_action_type_id = 2 AND post_actions.deleted_at IS NULL
	GROUP BY posts.user_id
) x
WHERE user_stats.likes_received <> x.cnt 
       AND user_stats.user_id = x.user_id