- ベストアンサー
MySQLでの効率的なSQLの作り方
- MySQLでの効率的なSQLを学ぶ
- 通話記録から特定の条件でデータを抽出する方法
- 通話時間とタイムスタンプを活用した集計方法
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
訂正します。 select d.dai, ifnull(c.count, 0) as count, ifnull(c.max_time, 0) as max_time, ifnull(c.min_time, 0) as min_time, ifnull(c.ave_time, 0) as ave_time from ( select @dai := 0 as dai union select @dai := @dai + 1 as dai from information_schema.columns limit 24 ) as d left join ( select time_format(timestamp, '%H') as dai, count(*) as count, max(time) as max_time, min(time) as min_time, avg(time) as ave_time from call_table where telno = '090xxxxyyyy' group by dai ) as c on d.dai = c.dai group by d.dai order by d.dai
その他の回答 (1)
- dell_OK
- ベストアンサー率13% (770/5733)
こんな感じでしょうか。 SELECT d.dai, count(*) AS count, ifnull(max(TIME), 0) AS max_time, ifnull(min(TIME), 0) AS min_time, ifnull(avg(TIME), 0) AS ave_time FROM ( SELECT d.dai FROM ( SELECT @dai := 0 AS dai UNION SELECT @dai := @dai + 1 AS dai FROM information_schema.COLUMNS LIMIT 24 ) AS d ) AS d LEFT JOIN ( SELECT *, TIME_FORMAT(TIMESTAMP, '%H') AS dai FROM call_table ) AS c ON d.dai = c.dai GROUP BY d.dai ORDER BY d.dai 通話がなかった場合に表示しないパターンは、LEFT JOINをINNER JOINにしてください。
お礼
素晴らしいSQLをありがとうございます! とても短いSQLで、欲しい状態で完璧に値が取得できました。