mysql - 如何计算计数

时间:2014-06-24 18:51:36

标签: mysql

我有一张重复的skus表。

skua
skua

skub
skub
skub

skuc
skuc

skud

    SELECT sku, COUNT(1) AS `Count` FROM products GROUP BY sku;

向我展示了所有重复的skus和重复的数量

    skua 2
    skub 3
    skuc 2
    skud 1

我试图找到有多少有2个重复,3个重复等。

即。

  duplicated  count
       1        1      (skud)
       2        2      (skua, and skuc)
       3        1      (skub) 

我不知道怎么写sql。我想它需要一个子选择......

感谢

2 个答案:

答案 0 :(得分:1)

select dup_count as duplicated,
       count(*) as `count`, 
       group_concat(sku) as skus
from
(
    SELECT sku, COUNT(1) AS dup_count
    FROM products 
    GROUP BY sku
) tmp_tbl
group by dup_count

答案 1 :(得分:1)

只需将当前查询用作内联视图,并使用与表中的行相同的行。

e.g。

SELECT t.Count  AS `duplicated`
     , COUNT(1) AS `count`
  FROM ( SELECT sku, COUNT(1) AS `Count` FROM products GROUP BY sku ) t
 GROUP BY t.Count

MySQL将内联视图称为“派生表”,当我们理解MySQL实际处理它时,该名称是有意义的。 MySQL运行该内部查询,并创建一个临时的MyISAM表;完成后,MySQL使用临时MyISAM表运行外部查询。 (如果在查询上运行EXPLAIN,你会看到。)

上面,我在你格式化时就离开了你的查询;我倾向于重新格式化您的查询,因此整个查询看起来像这样:

SELECT t.Count  AS `duplicated'
     , COUNT(1) AS `count`
  FROM ( SELECT p.sku
              , COUNT(1) AS `Count` 
           FROM products p 
          GROUP BY p.sku 
       ) t
 GROUP BY t.Count

(只是让我更容易看到内部查询,更容易提取并单独运行。并且限定所有列引用(使用表别名或表名)是最佳做法。)