我试图计算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是“名称”在查询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),但是那给了user_occur 1(当然,回想起来)。
我不知道如何完成最后一步-我对MySQL并不很坚强,所以任何见识都会受到赞赏。我将不胜感激地解释一下为什么它会以这种方式起作用,以及如何考虑下一次构造查询。