As the CloseReason are now part of SEDE I've created queries that use those tables:
Here is the close statistics for non-deleted posts
select case
when crt.id in (1,101) then 'duplicate'
when crt.id in (2,102) then 'off topic'
else crt.name
end as [name]
, count(ph.id) as [count]
from posthistory ph
inner join CloseReasonTypes crt
on crt.id = cast(ph.comment as int)
where posthistorytypeid = 10
group by case
when crt.id in (1,101) then 'duplicate'
when crt.id in (2,102) then 'off topic'
else crt.name
end
Here I combined the two separate duplicate and off topic close reasons into one, based on @ShadowWizards comment. In the next query I leave that out so you can see if the change of reasons and the subtle new guidance that came with their introduction made a difference for you.
And this one shows your own favourite close reasons:
select crt.name
, count(ph.id) as [count]
from posthistory ph
inner join CloseReasonTypes crt
on crt.id = cast(ph.comment as int)
where posthistorytypeid = 10
and text like '%"Id":' + ##Userid:string## + ',%'
group by crt.name
Final note: SEDE is update once a week and doesn't hold deleted posts.