説明しづらい状況ですが、データを抽出したい時に、データ全体の総和と、年月単位での件数を同じ出力結果で求めるたい事があると思います。
メインテーブル
| rest_date | id | login_flag |
|---|---|---|
| 2017−04−1 | 0001 | 1 |
| 2017−04−1 | null | 1 |
| 2017−05−1 | null | null |
| 2017−06−1 | 0003 | null |
| 2017−07−1 | 0004 | 1 |
| 2017−07−1 | 0005 | 1 |
サブテーブル
| rest_date | id | login_flag |
|---|---|---|
| 2017−04−1 | 0001 | 1 |
| 2017−06−1 | 0004 | 1 |
抽出結果
| time | 全体総数 | ログイン総数 | サブテーブル総数 |
|---|---|---|---|
| 2017−04 | 2 | 1 | 1 |
| 2017−05 | 1 | 0 | 0 |
| 2017−06 | 1 | 1 | 1 |
| 2017−07 | 1 | 2 | 0 |
SELECT DATE_FORMAT(main_table.rest_date, '%Y-%m') AS time
, COUNT(*) AS count
, COUNT(main_table.login_flag) AS login_count
, COUNT(sub_table.id) AS spare_count
FROM main_table left join sub_table on main_table.id=sub_table.id
GROUP BY DATE_FORMAT(main_table.rest_date, '%Y-%m');
count()で数えられるのはnull以外なのでそれを利用する。
多岐にわたる場合はsumで増置していく方法もあります。sum(case when target_flag=1 then 1 end) AS 'フラグオン総数'とかです。