MySQL计算唯一值和重复值

时间:2016-05-18 13:37:42

标签: mysql count union

我需要一些帮助来计算MySQL中的唯一值和重复值。我想知道总共有多少记录,还有两次和三次有多少等等......

我需要使用UNION还是其他什么?我认为SUM对我来说是最好的解决方案,因为我将来可能会使用这些联接。

示例数据:

| custId | name   |
|--------|--------|
| 1001   | Alex   |
| 1001   | Alex   |
| 1002   | Daniel |
| 1003   | Mark   |
| 1002   | Daniel |

示例结果:

| total | twoTimes | threeTimes |
|-------|----------|------------|
|     3 |        2 |          0 |

提前致谢。

2 个答案:

答案 0 :(得分:0)

只需要一个基本的group by就可以了

    SELECT YourValue, Count(YourValue)
    FROM YourTable
    GROUP BY YourValue

如果您只想要一个类别,例如唯一值ADD

   HAVING Count(YourValue)  = 1

答案 1 :(得分:0)

这是我的方法:

http://sqlfiddle.com/#!9/9411dc/3

SELECT c.cnt AS `times`, COUNT(c.name) cnt
FROM (SELECT name, COUNT(custId) cnt
FROM cust
GROUP BY name) c
GROUP BY c.cnt;

这不完全是你所问的(你要求使用非常难以实现的数据透视表)。因此,如果你想让它成为一个支点,你可以在这里阅读:MySQL pivot table

如果您确定最大重复次数非常小,则您的透视查询可能是:

http://sqlfiddle.com/#!9/9411dc/5

SELECT 
  SUM(IF(c.cnt=1,1,0)) AS `Unique`, 
  SUM(IF(c.cnt=2,1,0)) AS `Two times`, 
  SUM(IF(c.cnt=3,1,0)) AS `Three times`, 
  SUM(IF(c.cnt=4,1,0)) AS `Four times`
FROM (SELECT name, COUNT(custId) cnt
FROM cust
GROUP BY name) c