• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:MySQLでの効率の良いSQLを教えてください)

MySQLでの効率的なSQLの作り方

このQ&Aのポイント
  • MySQLでの効率的なSQLを学ぶ
  • 通話記録から特定の条件でデータを抽出する方法
  • 通話時間とタイムスタンプを活用した集計方法

質問者が選んだベストアンサー

  • ベストアンサー
  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.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

RYO-88
質問者

お礼

素晴らしいSQLをありがとうございます! とても短いSQLで、欲しい状態で完璧に値が取得できました。

その他の回答 (1)

  • dell_OK
  • ベストアンサー率13% (766/5720)
回答No.1

こんな感じでしょうか。 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にしてください。

関連するQ&A