sql - 如何获得 MySQL 中的前 3 个频率?

标签 sql mysql aggregate

在 MySQL 中,我有一个名为“meanings”的表,其中包含三列:

  • “人”(整数),
  • “单词”(字节,16 个可能的值)
  • “意义”(字节,26 个可能的值)。

一个人为每个词赋予一种或多种含义:

person word meaning
-------------------
1      1    4
1      2    19
1      2    7  <-- Note: second meaning for word 2
1      3    5
...
1      16   2

然后是另一个人,依此类推。将有数千人。

我需要为 16 个单词中的每一个找到前三个含义(及其出现频率)。像这样的东西:

+--------+-----------------+------------------+-----------------+
| Word   | 1st Most Ranked | 2nd Most Ranked  | 3rd Most Ranked |
+--------+-----------------+------------------+-----------------+
| 1      | meaning 5 (35%) | meaning 19 (22%) | meaning 2 (13%) |
| 2      | meaning 8 (57%) | meaning 1 (18%)  | meaning 22 (7%) |
+--------+-----------------+------------------+-----------------+

...

是否可以通过单个 MySQL 查询来解决这个问题?

最佳答案

好吧,如果您按单词和含义分组,您可以轻松地从数据集中获得使用每个单词/含义组合的人的百分比。

为了限制返回的每个单词的含义数量,您需要为每个单词/含义组合创建某种过滤器。

看来你只是想要作业的答案,所以我不会发布更多内容,但这应该足以让你走上正轨。

关于sql - 如何获得 MySQL 中的前 3 个频率?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2458119/

相关文章:

SQL:条件选择中的条件选择

php - 使用一些使用数据库连接的类

python - 分组时应用自定义函数返回 NaN

sql - PostgreSQL Distinct 和 Format 的最快方法

mysql - 在 MySQL 中,UNIQUE varchar 也必须是 PRIMARY KEY 吗?

SQL ROW_NUMBER 与 INNER JOIN

php - Joomla 模块 - SQL 未找到?

MySQL插入到表中从另一个表中选择数据

C# MySql 创建用户

mysql - 如何在条件聚合mysql中添加where?