1. Cos'è una Join dovresti saperlo mentre quella di includere delle selezioni tipiche della Where è una scorciatoia che non tutti sanno (e abbatte un bel po' i tempi di esecuzione)
2. Cosa fa una Group By dovresti saperlo (ari )
3. E' meglio dire cosa si vuole contare per a) precisione b) velocità c) NON contare eventuali NULL (ma in questo caso non ne hai)

Un'ultima cosa: il titolo dice di non usare Having... ma dove lo si sarebbe dovuto usare?