按语句对mysql group中分组计数的出现进行计数

时间:2019-01-29 02:57:31

标签: mysql

我试图计算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并不很坚强,所以任何见识都会受到赞赏。我将不胜感激地解释一下为什么它会以这种方式起作用,以及如何考虑下一次构造查询。

0 个答案:

没有答案