基于已经给出的示例,我想问我进一步的问题。
MySQL: Count occurrences of distinct values

示例数据库

id         name
-----      ------
1          Mark
2          Mike
3          Paul
4          Mike
5          Mike
6          John
7          Mark


预期结果

name       count
-----      -----
Mark       2
Mike       3
Paul       1
Mike       3
Mike       3
John       1
Mark       2


我认为“ GROUP BY”无济于事。
非常感谢你。

最佳答案

最简单的方法是在Count()的分区上将name用作Window Function。但是它们仅在MySQL 8.0.2 and onwards中可用。

但是,使用Derived Table可以使用另一种方法。在子选择查询(派生表)中,我们将识别每个唯一name的计数。现在,我们只需要将其连接到主表即可显示每个名称的计数(而不是对它们进行分组):

SELECT
  t1.name,
  dt.total_count
FROM your_table AS t1
JOIN
(
 SELECT name,
        COUNT(*) AS total_count
 FROM your_table
 GROUP BY name
) AS dt ON dt.name = t1.name
ORDER BY t1.id




如果MySQL 8.0.2+可用,则解决方案将不再那么冗长:

SELECT
  name,
  COUNT(*) OVER (PARTITION BY name) AS total_count
FROM your_table

关于mysql - MySQL:计算每一行不同值的出现,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53103519/

10-11 03:26
查看更多