# 특정 카테고리를 시청 중인 사용자의 이메일 목록

**URL:** https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171
**Category:** Data & reporting
**Tags:** sql-query
**Created:** [7월 26, 2021, 9:19오전 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171 "2021-07-26T09:19:46Z")
**Posts on this page:** 8
**Page:** 1

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [7월 26, 2021, 9:19오전 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/1 "2021-07-26T09:19:46Z")

</div>

[Data Explorer](https://meta.discourse.org/t/32566?silent=true) 쿼리에서 다음을 실행하고 있습니다:

```plaintext
SELECT * FROM category_users WHERE category_id = '10'

```

이렇게 하면 다음과 같은 결과가 표시됩니다:

 ![Screenshot 2021-07-26 at 12.15.57](https://global.discourse-cdn.com/meta/original/3X/1/7/17740f6c5578b996ad2710db09257ba000693f52.png)

이 출력에 사용자의 이메일 주소도 함께 표시하려면 어떻게 해야 하나요?

_(개인정보 관련 논의를 사전에 방지하기 위해 다음 사항을 명시합니다. 우리는 유료 회원들을 위한 사설 Discourse를 운영하고 있으며, 회원들은 서비스 제공 목적으로 자신의 개인 정보를 사용할 수 있도록 개별적으로 동의했습니다. 우리는 자동화된 방식으로 상호 운용되지 않는 시스템을 사용하고 있으며, 두 가지 다른 시스템의 사용자를 수동으로 연결하기 위해 이메일을 사용하고 있습니다.)_

---

<div class="post-metadata">

### Author: ![simon](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simon/32/339122_2.png) [@simon](https://meta.discourse.org/u/simon)
#### Post date: [7월 26, 2021, 5:20오후 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/2 "2021-07-26T17:20:30Z")

</div>

> [@alehandrof](#):
>
> 이 출력에 사용자 이메일도 표시하려면 어떻게 해야 하나요?

`category_users` 테이블의 `user_id`를 기준으로 `user_emails` 테이블을 조인해야 합니다. 다음과 같은 쿼리를 시도해 보세요:

```sql
SELECT
cu.*,
ue.email
FROM category_users cu
JOIN user_emails ue
ON ue.user_id = cu.user_id
WHERE category_id = '10'
AND ue.primary = true

```

---

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [10월 4, 2021, 3:13오전 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/3 "2021-10-04T03:13:29Z")

</div>

시몬, 감사합니다. 그리고 이렇게 늦게 답장드려서 죄송합니다!

방금 쿼리를 시도해 봤는데, 제가 원하던 바로 그 동작을 합니다!🙏

특정 카테고리뿐만 아니라 사이트 전체에서 동일한 데이터를 가져올 수 있는 방법이 있을까요?

이렇게 묻는 이유는 포럼을 더 세분화된 카테고리로 재구성할 계획이 있어서, 각 카테고리에 대해 별도의 [Data Explorer](https://meta.discourse.org/t/32566?silent=true) 쿼리를 만드는 제 계획이 점점 더 현실성이 없어지고 있기 때문입니다.

아래와 같은 방식으로 여러 카테고리를 요청하는 법은 알아냈습니다:

`WHERE (category_id = '48') OR (category_id = '66') OR (category_id = '57')`

하지만 카테고리를 변경할 때마다 쿼리를 업데이트해야 한다는 점을 기억해야 하는데, 저는 이런 걸 매우 자주 잊어버리는 편입니다 😃

---

<div class="post-metadata">

### Author: ![simonk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simonk/32/247950_2.png) [@simonk](https://meta.discourse.org/u/simonk)
#### Post date: [10월 4, 2021, 10:59오전 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/4 "2021-10-04T10:59:37Z")

</div>

`category_id = <number>` 필터를 아예 제거하면 됩니다. 그러면 쿼리는 다음과 같이 보입니다:

```sql
SELECT
    cu.*,
    ue.email
FROM category_users cu
JOIN user_emails ue
  ON ue.user_id = cu.user_id
WHERE ue.primary = true

```

[Data Explorer](https://meta.discourse.org/t/32566?silent=true)는 카테고리 이름을 표시해 주지만, 결과를 내보낼 때 해당 이름은 표시되지 않습니다. 이 점이 문제가 된다면, 카테고리 이름을 컬럼으로 명시적으로 추가할 수 있습니다. 예를 들어 다음과 같이요:

```sql
SELECT
    c.name,
    cu.*,
    ue.email
FROM category_users cu
JOIN user_emails ue
  ON ue.user_id = cu.user_id
JOIN categories c
  ON cu.category_id = c.id
WHERE ue.primary = true
ORDER BY c.name

```

---

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [10월 5, 2021, 9:46오전 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/5 "2021-10-05T09:46:39Z")

</div>

@simonk님, 질문 감사합니다!

`WHERE ue.primary = true` 대신 `AND ue.primary = true`를 사용하신 이유가 궁금합니다. 쿼리에는 항상 WHERE 절이 필요한가요?

---

<div class="post-metadata">

### Author: ![simonk](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/simonk/32/247950_2.png) [@simonk](https://meta.discourse.org/u/simonk)
#### Post date: [10월 5, 2021, 5:45오후 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/6 "2021-10-05T17:45:13Z")

</div>

> [@alehandrof](#):
>
> `WHERE ue.primary = true` 대신 `AND ue.primary = true`를 사용한 이유가 무엇인지 이해가 되지 않습니다. 쿼리에는 항상 `WHERE`가 필요한가요?

정확히 말하면 그렇지 않습니다. @simon님의 쿼리를 약간 다시 포맷하면 더 명확해질 수 있습니다:

```sql
SELECT
    cu.*,
    ue.email
FROM category_users cu
JOIN user_emails ue ON ue.user_id = cu.user_id
WHERE (category_id = '10' AND ue.primary = true)

```

`category_id`와 `ue.primary` 조건은 모두 `AND`로 연결된 `WHERE` 절의 일부입니다. 조건 중 하나를 제거하면 `AND`는 제거되지만 `WHERE` 절은 유지됩니다.

대부분의 간단한 SQL 쿼리는 다음과 같은 형태를 따릅니다:

```sql
SELECT <원하는 항목>
FROM <테이블>
WHERE <필터 조건>

```

`WHERE` 절을 아예 생략할 수도 있지만, 그렇게 하면 지정된 테이블의 **모든** 행을 반환받게 됩니다.

다음은 원래 쿼리(다시 포맷된 형태)입니다:

```sql
SELECT *
FROM category_users
WHERE category_id = '10'

```

- `"SELECT *"`는 포함된 모든 테이블의 모든 컬럼을 쿼리가 반환하도록 하겠다는 의미입니다.

- `"FROM category_users"`는 쿼리를 실행할 테이블을 나타냅니다. `category_users` 테이블에는 다음과 같은 행이 포함되어 있습니다:

- `"WHERE category_id = '10'"`은 `category_id` 컬럼의 값이 `10`인 행에만 관심이 있다는 의미입니다. 이 줄이 없다면 `category_users` 테이블의 **모든** 행을 받게 됩니다.

@simon님은 사용자의 이메일 주소를 추가한 새로운 버전을 제공했습니다:

> [@simon](#):
>
> ```sql
> SELECT
> cu.*,
> ue.email
> FROM category_users cu
> JOIN user_emails ue
> ON ue.user_id = cu.user_id
> WHERE category_id = '10'
> AND ue.primary = true
> 
> ```

이 쿼리는 원래 쿼리에서 몇 가지 변경 사항을 포함하고 있으며, 그 이유는 두 가지입니다: 이메일 주소는 다른 테이블(`user_emails` 테이블)에 저장되어 있고, 사용자는 여러 개의 이메일 주소를 가질 수 있기 때문입니다.

- `SELECT` 절에서:

- `FROM` 절에서:

그 후, 검색 범위를 단일 카테고리로 제한하지 않으려고 하셨기 때문에 단순히 `category_id` 필터를 제거하면 되었습니다. 여전히 주 이메일 주소만 반환하고 싶으므로 `WHERE` 절 전체를 제거하면 안 됩니다. 다시 말해, 필터 조건이 다음과 같이 변경되었습니다:

```sql
category_id = '10' AND ue.primary = true

```

다음과 같이:

```sql
ue.primary = true

```

후다! 모두 이해가 되셨기를 바랍니다 🤓

---

<div class="post-metadata">

### Author: ![alehandrof](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/alehandrof/32/119526_2.png) [@alehandrof](https://meta.discourse.org/u/alehandrof)
#### Post date: [10월 11, 2021, 12:05오후 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/7 "2021-10-11T12:05:31Z")

</div>

@simonk님, 정말 상세하게 작성해 주셔서 감사합니다! 솔직히 SQL은 저에게 완전한 미스터리였는데, 설명 덕분에 이제 막 이해를 시작할 수 있었습니다. 이렇게 시간을 내어 도와주셔서 정말 감사드립니다! 🙏

---

<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: [11월 10, 2021, 12:05오후 UTC](https://meta.discourse.org/t/list-of-emails-of-users-watching-a-specific-category/198171/8 "2021-11-10T12:05:44Z")

</div>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.
