我有一张重复的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。我想它需要一个子选择......
感谢
答案 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
(只是让我更容易看到内部查询,更容易提取并单独运行。并且限定所有列引用(使用表别名或表名)是最佳做法。)