###前提・実現したいこと
以下のテーブルがあります。
groups テーブル
id | type | parent_id | name | sort_no
1 zone 東京 0
2 area 1 渋谷支店 0
3 area 1 原宿支店 0
4 office 2 開発部 0
5 office 2 営業部 0
6 office 2 管理部 0
7 zone 神奈川 0
8 area 7 横浜支店 0
9 area 7 湘南支店 0
10 office 9 開発部 0
11 office 8 営業部 0
12 office 8 管理部 0
users テーブル
id | name | group_id
1 suzuki 4
2 satou 5
3 kojima 11
これを以下の形で出力&想定する件数で取得したい。
並び順 | ゾーン名 | エリア数 | 部署数 所属ユーザー数
0 東京 2 3 2
1 神奈川 2 3 1
###該当のソースコード
select g3.sort_no 表示順, g3.name ゾーン名, (select count(1) from groups g where g.parent_id = g3.id) エリア数, (select count(1) from groups g where g.parent_id = g2.id) 部署数, (select count(1) from users u where g1.id = u.group_id) ユーザー数 from users u left join groups g1 on u.group_id = g1.id left join groups g2 on g1.parent_id = g2.id left join groups g3 on g2.parent_id = g3.id group by g3.name order by g3.sort_no
###試したこと
しかしこれだと思うような結果が取得できません。
エリア数のところで数があわなくなってしまいます。
どなたか正しいsqlを教えていただけると幸いです。