![](/img/trans.png)
[英]Count all rows and add a certain int from column of each result row into overall count
[英]Count rows by year and add row with 0 value if no result
假設我有一個帶有這些行的MySQL表:
Name | date
-----------
A | 2016
B | 2016
C | 2016
B | 2015
B | 2015
C | 2014
A | 2014
如何按名稱對行進行計數以得到這樣的結果(假設我要對2013年至2016年之間的年份進行計數):
Name | date | COUNT(Name)
-------------------------
A | 2016 | 1
B | 2016 | 1
C | 2016 | 1
A | 2015 | 0
B | 2015 | 2
C | 2015 | 0
A | 2014 | 1
B | 2014 | 0
C | 2014 | 1
A | 2013 | 0
B | 2013 | 0
C | 2013 | 0
如yu所見,如果它們在另一年中至少出現一次(我的結果必須比現有的行多“多”),則需要在該年的結果集中“添加”行! 例如,由於我要計算從2013年開始的年份,因此表中也沒有需要的結果行。
謝謝文斯
使用cross join
生成行。 然后使用left join
和聚合計數。
select t.name, y.yyyy, count(t.name)
from (select distinct name from t) n cross join
(select 2013 as yyyy union all select 2014 union all select 2015 union all select 2016) y left join
t
on t.date = y.yyyy and t.name = n.name
group by t.name, y.yyyy;
嘗試這個
SELECT *,count(*) as c FROM mytable group by date, name
從表中按名稱,日期選擇名稱,日期,計數(名稱)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.