2015-07-11 2 views
0

Недавно я получил этот вопрос в интервью, на который я не смог ответить. Вопрос заключался в том, чтобы перечислить количество дублей, которые появляются в колонке работодателя, как из этой таблицыКак форматировать и печатать результат запроса sql

id | employer | employee 
1 | isro  |  dude1 
2 | isro  | dude 2 
3 | cnd  | dude 3 
4 | df   | dsfdef 
5 | dfdf   | dfdfd 
... 

поэтому результат должен быть как

isro = 2 
df = 4 
dfsf = 6 

как я этого добиться? Я знаю, что есть счетчик (*), который я мог бы использовать с предложением select с предложением where, но как достичь этого результата.

+0

Неясно, как этот результат должен выйти из запроса. Вам придется объяснить логику. – arkascha

+0

Или это вопрос _really_ только о группировке работодателем и подсчете? – arkascha

ответ

2

Предложение HAVING может быть использован для фильтрации агрегированных значений:

SELECT employer, COUNT(*) 
FROM yourTable 
GROUP BY employer 
HAVING COUNT(*) > 1 
+0

Поскольку мне нужно только напечатать количество раз, когда работодатель встречается в моей таблице, не следует использовать счетчик (работодатель). В чем разница между count (*) и count (имя столбца)? и почему включено предложение «, имея счет (*)> 1», будут перечислены только значения, имеющие дубликаты в столбце работодателя? «выберите работодателя, счетчик (работодатель) из группы таблиц работодателем; 'Это правильный ответ на мой вопрос? –

+1

@MahabPhoenixKhan 'COUNT (*)' будет считать все строки, тогда как 'COUNT (работодатель)' будет исключать из подсчета любые строки, где «работодатель» равен «NULL». Поскольку вы «GROUPING BY работодателем», значение «NULL» для «работодателя» будет возвращено с подсчетом '0'. Если это никогда не будет «NULL», между «COUNT (*)» и «COUNT» (работодателем) не будет никакой разницы. Вот простой пример для демонстрации: http://www.sqlfiddle.com/#!6/5f029/2/0 –

0

предполагая TableName это имя таблицы, которую вы хотите, чтобы выбрать из, это будет ваш ответ.

SELECT employer, count(employer) 
    FROM TableName 
    GROUP BY employer 
    HAVING COUNT(*) > 1 

вот ответ на очень похожий вопрос, который содержит дополнительную информацию для вас.

How to count occurrences of a column value efficiently in SQL?

Смежные вопросы