# 데이터베이스에서 SQL로 \`user\_stats\`의 좋아요 업데이트

**URL:** https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283
**Category:** Self-hosting
**Created:** [12월 4, 2019, 12:35오후 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283 "2019-12-04T12:35:02Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![pgr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pgr/32/156783_2.png) [@pgr](https://meta.discourse.org/u/pgr)
#### Post date: [12월 4, 2019, 12:35오후 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283/1 "2019-12-04T12:35:02Z")

</div>

여러분, 안녕하세요!

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

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

```sql
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

```

```sql
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`에는 업데이트되지 않습니다…

---

<div class="post-metadata">

### Author: ![pfaffman](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pfaffman/32/120154_2.png) [@pfaffman](https://meta.discourse.org/u/pfaffman)
#### Post date: [12월 4, 2019, 1:19오후 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283/2 "2019-12-04T13:19:46Z")

</div>

Rails 또는 플러그인을 통해 수행해야 합니다. [Data explorer](https://meta.discourse.org/t/32566?silent=true)는 데이터를 변경할 수 없습니다.

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

---

<div class="post-metadata">

### Author: ![pgr](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/pgr/32/156783_2.png) [@pgr](https://meta.discourse.org/u/pgr)
#### Post date: [12월 4, 2019, 1:47오후 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283/3 "2019-12-04T13:47:40Z")

</div>

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

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

```sql
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

```

```sql
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

```

---

<div class="post-metadata">

### Author: ![system](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/system/32/443519_2.png) [@system](https://meta.discourse.org/u/system)
#### Post date: [9월 15, 2023, 6:04오후 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283/4 "2023-09-15T18:04:49Z")

</div>



---

<div class="post-metadata">

### Author: ![JammyDodger](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/jammydodger/32/254611_2.png) [@JammyDodger](https://meta.discourse.org/u/JammyDodger)
#### Post date: [9월 16, 2023, 5:15오전 UTC](https://meta.discourse.org/t/updating-likes-in-user-stats-in-the-database-via-sql/135283/5 "2023-09-16T05:15:28Z")

</div>


