繁体   English   中英

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

[英]MySQL: Count occurrences of distinct values for each row

基于已经给出的例子,我想问我进一步的问题。 MySQL:计算不同值的出现次数

示例数据库

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' 没有帮助。 非常感谢。

最简单的方法是在name的分区上使用Count()作为窗口函数 但它们仅在MySQL 8.0.2 及更高版本中可用。

但是,使用派生表的另一种方法是可能的。 在子选择查询(派生表)中,我们将识别每个唯一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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM