2016-05-18 4 views
0

Мне нужна помощь в подсчете как уникальных, так и повторяющихся значений в MySQL. Я хочу знать, сколько записей есть общее, а также сколько существует два раза и три раза и так далее ...MySQL подсчет уникальных и повторяющихся значений

Нужно ли использовать UNION или что-то в этом роде? Я думаю, что SUM будет лучшим решением для меня из-за того, что я могу использовать некоторые объединения с этим в будущем.

Образец данных:

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

Результаты Примеры:

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

Спасибо заранее.

+3

обеспечивают ваша схема таблицы и образец необработанных данных и ожидаемый набор результатов – Alex

+0

@Alex, я обновил свой вопрос. – lingo

ответ

0

Просто основной group by должен сделать это

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

Если вы хотите только категорию, как уникальные значения ADD

HAVING Count(YourValue) = 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 
Смежные вопросы