我正在尝试计算 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 不是很擅长,所以任何见解都将不胜感激。对于它为什么以这种方式运行,以及如何考虑下次构建查询的一些解释,我将倍加感激。