MySQL:计算每一行不同值的出现

时间:2018-11-01 14:39:24

标签: mysql

基于已经给出的示例,我想问我进一步的问题。 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”没有帮助。 非常感谢。

1 个答案:

答案 0 :(得分:0)

最简单的方法是在name的分区上将Count()用作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