年月ごとの総数を求めたかったのですが、GROUP BYを利用すると,まとめた総数からさらに条件をつけて絞った条件総数がわからず困っています。
SELECT DATE_FORMAT(rest_date, '%Y-%m') AS time, COUNT(*) AS count FROM res GROUP BY DATE_FORMAT(rest_date, '%Y%m');
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
回答4件
0
ベストアンサー
まとめて取得ってこういう事?
※count()で数えられるのはNull以外なのでそれを利用する。
SQL
1SELECT DATE_FORMAT(rest_date, '%Y-%m') AS time 2 , COUNT(*) AS count 3 , COUNT(login_flag) AS login_count 4FROM res 5GROUP BY DATE_FORMAT(rest_date, '%Y-%m') 6;
もし、login_flag=1の時だけという場合は、
** sum(case when login_flag=1 then 1 end) AS login_count **
などとします。
login_flag=(0,1,null)という値の範囲なら、
** sum(login_flag) AS login_count **
でもいいですね。
追記
SQL
1SELECT DATE_FORMAT(res.rest_date, '%Y-%m') AS time 2 , COUNT(*) AS count 3 , COUNT(res.login_flag) AS login_count 4 , COUNT(fix.id) AS spare_count 5FROM res left join fix on res.id=fix.id 6GROUP BY DATE_FORMAT(res.rest_date, '%Y-%m') 7;
投稿2018/05/17 13:44
編集2018/05/18 04:10総合スコア25173
0
実際にどうデータが取りたいのかわからなかったので、
group by したものをさらに条件付けする方法のひとつを書いてみます。
having句 を使います。
テーブル test
id | category | num |
---|---|---|
1 | a | 1 |
2 | a | 3 |
3 | b | 0 |
4 | c | 5 |
こんなテーブルがあったとして、
「categoryごとにnumを合計した上で、numの合計が0以上のものをselectしたい場合」
sql
1select category, sum(num) as sum_num from test group by category having sum_num > 0
のように書きます。
having句の書く位置は、必ず、 group by より後ろです。
select category, sum(num) as sum_num from test group by category
の実行結果は、
category | sum_num |
---|---|
a | 4 |
b | 0 |
c | 5 |
こうなりますが、 having句を使うことで、
select category, sum(num) as sum_num from test group by category having sum_num > 0
の実行結果は、
category | sum_num |
---|---|
a | 4 |
c | 5 |
こうなります。
投稿2018/05/17 09:35
編集2018/05/17 09:36総合スコア1910
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
サンプルがないので、具体的に何をやりたいかわかりませんが
集計したデータの小計や合計をほしいのであれば
with rollupを利用します
投稿2018/05/17 09:33
総合スコア114769
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
テーブル構造を再現することが出来ないので一般論でいいますが、
GROUP BYしたSELECT文を使ってさらにSELECT文を書けばいいんじゃないですかね。
ざっくりとした流れは、
SELECT X.~ FROM ( SELECT ~ FROM ~ GROUP BY ~ ) AS X GROUP BY X.~
みたいな?
でも、もっと楽に書くこともできそうな気もしますので、
やはり書いてテストするためにも再現方法
(CREATE TABLE文&サンプルデータ用INSERT INTO文など)を示してほしいです。
投稿2018/05/17 09:21
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。