Du har överkomplicerat din fråga, använd bara grupp efter för att få räkningarna efter grupper. Uppdatering:eftersom du har samma nycklar i både 4a och 4b tabeller och du vill sammanfatta dem i en utdata, behöver du en övergripande summa eller räkning beroende på vilken underfråga du använder
select kd_hari, hari, sum(rowcount) as rowcount from
(select a.kd_hari,hari, count(a.kd_hari) as rowcount
from 4a a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
group by a.kd_hari,hari
union all
select b.kd_hari,hari, count(b.kd_hari)
from 4b a,tbhari h where a.kd_hari=h.kd_hari and kd_ruang in('L','P')
group by a.kd_hari,hari) as t
group by kd_hari,hari
Alternativt, kombinera 4a och 4b med en union, allt i en underfråga och gå med i den på tbhari-tabellen och du kan använda count() med group by på underfrågan på det sättet eftersom underfrågan kommer att inkludera alla rader från båda tabellerna.
Men hur jag skrev exempelkoden kan du dra nytta av de befintliga indexen medan du går med i tabellerna. Om du kombinerar dem först med union och sedan gör joinen kommer inga index att användas för joinen.