2015-04-29 2 views
1

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

Таблица:

a_id  year 
----  ---- 
1  2010 
1  2011 
1  2012 
1  2012 
1  2013 
1  2014 
1  2015 
2  2010 
2  2011 
2  2013 
2  2014 
2  2014 
2  2015 
3  2010 
3  2010 
3  2011 

Ожидаемый результат:

a_id year occurrences 
---- ----- ----------- 
1  2010  1 
1  2011  1 
1  2012  2 
1  2013  1 
1  2014  1 
1  2015  1 
2  2010  1 
2  2011  1 
2  2013  1 
2  2014  2 
2  2015  1 
3  2010  2 
3  2011  1 

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

SELECT a__id, year, count(distinct a_id) as occurrences 
FROM table1 
GROUP by year 
ORDER by a_id 

Как я могу создать эту третью колонку?

+2

Сменить на счет (*) –

+0

У вас нет ПЕРВИЧНОГО КЛЮЧА. Со временем это окажется проблематичным. – Strawberry

+0

@Giorgi Nakeuri дал отличный ответ, просто пройдите через него один раз, кажется, что это соответствует вашим требованиям. –

ответ

0

Scince вы группируете a_id и year Вы, конечно, получаете только 1 отличное значение для группы. Просто измените count(distinct a_id) на count(*).

Например, вы получаете группу:

1  2012 
1  2012 

Обратите внимание в этой группе различные значения a_id равно 1. Но вы хотите, количество всех строк в группе. С distinct вы получите 1 как появление во всех группах.

EDIT:

Хорошо, что я пропустил, что вы группировать только year, так что вы должны группу по a_id также. Остальная часть ответа остается такой, как есть. Таким образом, вы получаете:

SELECT a__id, year, count(*) as occurrences 
FROM table1 
GROUP by a__id, year 
+0

Отлично! Работает как шарм. Благодаря! И спасибо за объяснение от разных. Раньше мне приходилось сталкиваться с count (*), но я не группировал a_aid только год. –

0

Используя следующее, вы получите то, что ищете.

SELECT a_id, year, count(*) 
FROM table1 
GROUP BY a_id, year 
ORDER BY a_id, year 

Хотя в предыдущих версиях ORDER BY, возможно, был гарантирован MySQL, он устарел сейчас. Если вы хотите, чтобы ваши результаты вернулись, добавьте ORDER BY. «Будущее вас» благодарит вас за это.

+0

ORDER BY избыточен в этом конкретном контексте, но в остальном отлично. – Strawberry

+0

Как так? Устанавливает ли MySQL ORDER BY? Я всегда был бы откровенен, а потом просто предполагал. –

+0

Да. Это действительно так, но никакого вреда для подхода «пояса и фигурных скобок» – Strawberry

0
SELECT a__id, year, count(*) as occurrences 
FROM table1 
GROUP by a__id, year 
Смежные вопросы