1

我正在尝试计算 count 语句中不同结果的数量,以在我的数据库中找到最多产的用户。每个用户交互都作为用户名和交互编号输入。

TABLE
| name | interaction | filter data |
|   1  |      A      |             |
|   1  |      A      |  some stuff |
|   1  |      B      |  to filter  |
|   1  |      B      |  for the    | 
|   1  |      B      |  queries    |
|   2  |      C      |             | etc...

我想:a)找到给定用户的最多交互次数:

RESULT A
| name | interaction | int_count |
|   1  |      A      |     2     |
|   1  |      B      |     3     |
|   2  |      C      |     1     |

然后 b) 找到最多产的用户:

RESULT B
| name | interaction | int_count | user_occur |
|   1  |      A      |     2     |     2      |
|   1  |      B      |     3     |     2      |
|   2  |      C      |     1     |     1      |

其中 user_occur 是 'name' 在查询 A 中出现的次数

我的查询 A 没问题,我正在尝试使用 JOIN 语句来获取查询 B 的 user_count:

SELECT origin.name, origin.interaction, 
counter.int_count, count(counter.name) AS user_occur
FROM table AS origin
LEFT JOIN(
    SELECT name, COUNT(interaction) AS int_count
    FROM table
    WHERE [filter-conditions]
    GROUP BY interaction) counter
ON origin.name = counter.name
WHERE [same-filter-conditions]
GROUP BY origin.interaction
ORDER BY counter.int_count DESC

但是,这出了点问题,因为我只是在每个 user_occur 行中获取交互数,当我想要他们的交互列表时,然后在每行末尾计算他们的交互总数(user_occur 应该对于给定的名称是相同的数字)。我尝试了 COUNT(DISTINCT counter.name) 但这只是给了我 1 的 user_occur (当然,回想起来)。

我不知道如何完成这最后一步——我对 MySQL 不是很擅长,所以任何见解都将不胜感激。对于它为什么以这种方式运行,以及如何考虑下次构建查询的一些解释,我将倍加感激。

4

0 回答 0