2015-04-29 40 views
1

我試圖找到一個MySQL查詢,它將顯示一年內ID值的出現次數。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 

如何創建第3列?

+2

更改爲計數(*) –

+0

您沒有PRIMARY KEY。及時,這將證明有問題。 – Strawberry

+0

@Giorgi Nakeuri給出了一個完美的答案,只需經過一次,根據您的要求,似乎沒問題。 –

回答

0

斯科特你正在按a_idyear分組,你當然只能得到1組不同的價值。只需將count(distinct a_id)更改爲count(*)即可。

例如你組:本組不同A_ID值

1  2012 
1  2012 

通知是1,但要在組中的所有行數。與distinct你會得到1在所有組中發生。

編輯

好吧,我已經錯過了,你只能通過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