# emoji的使用

**URL:** https://meta.discourse.org/t/usage-of-emojis/279030
**Category:** Data & reporting
**Tags:** emoji, sql-query
**Created:** [2023年九月14日 16:20 UTC](https://meta.discourse.org/t/usage-of-emojis/279030 "2023-09-14T16:20:04Z")
**Posts on this page:** 3
**Page:** 1

<div class="post-metadata">

### Author: ![frictionel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/frictionel/32/299701_2.png) [@frictionel](https://meta.discourse.org/u/frictionel)
#### Post date: [2023年九月14日 16:20 UTC](https://meta.discourse.org/t/usage-of-emojis/279030/1 "2023-09-14T16:20:04Z")

</div>

我计划用 [discourse reactions](https://meta.discourse.org/t/discourse-reactions/183261) 替换 [retort](https://meta.discourse.org/t/retort-a-reaction-style-plugin-for-discourse/35903)。为了找出要使用的表情符号，我想知道它们在我的论坛上的使用情况。由于找不到相应的查询，我在此分享我的查询：

计算使用 retort 插件添加的表情符号

```sql
SELECT count(*), REGEXP_MATCHES(key, '([a-z_+]+)|retort') emoji
    FROM post_details
    WHERE extra = 'retort'
    GROUP BY key
    ORDER BY 1 DESC

```

计算帖子中的表情符号（不包括系统用户）

```sql
SELECT count(*), REGEXP_MATCHES(raw, ' :([a-z_]+): ', 'g') emoji
    FROM posts
    WHERE user_id > 0
    GROUP BY emoji
    ORDER BY 1 DESC

```

---

<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: [2023年九月20日 15:18 UTC](https://meta.discourse.org/t/usage-of-emojis/279030/2 "2023-09-20T15:18:47Z")

</div>

很好。 🙂 我以前从未使用过 `REGEXP_MATCHES`，但我刚刚试用了它们（嗯，第二个。我没有安装 Retort 🙂）。

我认为您应该按 `emoji` 而不是 `smiley` 进行 `GROUP BY`。另外 `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`: 这将结果按结果集中的第一列（即计数）以降序排序。这意味着使用最频繁的表情符号将首先出现。
> 
> 因此，总而言之，此查询计算 `posts` 表中每个表情符号的使用次数，针对 `user_id` 大于 0 的帖子，并按结果排序，以便最常用的表情符号首先出现。

---

<div class="post-metadata">

### Author: ![frictionel](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/frictionel/32/299701_2.png) [@frictionel](https://meta.discourse.org/u/frictionel)
#### Post date: [2023年九月20日 15:26 UTC](https://meta.discourse.org/t/usage-of-emojis/279030/3 "2023-09-20T15:26:32Z")

</div>

> [@JammyDodger](#):
>
> 我认为您想按 `emoji` 而不是 `smiley` 进行分组。

哦，你说得对。我在我的网站上更改了它，但在这里忘了。😊

> [@JammyDodger](#):
>
> 另外 `user_id > 1` 会排除原始管理员。这可能是故意的，

确实，我应该在帖子中提到这一点。user\_id 1 是一个遗留用户（当时我的网站仍然允许匿名发帖），我不想将其计入计数。
