- ベストアンサー
SQLでの時間計算
こんにちは。 時刻関係の事でお聞きしたいことがあります。 SELECT ROUND(ROUND(SUM(労働時間)/100, 0) + MOD(ROUND(SUM(労働時間)/10, 2), ROUND(SUM(労働時間)/100,0))/ 6, 2) AS total FROM テーブル WHERE id = 対象者のID; とSQLを書き [15=0.25] [30=0.5] [45=0.75] と一つずつであれば、下記のように取得する事が取得する事が出来ました。 しかし労働時間テーブルに 1015 1045 と値がある場合、本来であれば[11.00]で表示されるはずが [23.83]という数字で表示されてしまいました。 解決方法が見出せない為、どうかお力・知恵をお貸し下さい。 よろしくお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
>1015 >1045 >と値がある場合、本来であれば[11.00]で表示されるはずが 21.00では?(^^; SELECT SUM(ROUND(労働時間/100, 0)) + ROUND(SUM(MOD(労働時間,100)) / 60, 2) AS total FROM テーブル WHERE id = 対象者のID; こんな感じでどうでしょう? >SUM(ROUND(労働時間/100, 0)) 時間の部分は、労働時間を100で割って、少数切り捨てた部分。それから合計。 (SUMの位置に注意、順番が違うと計算が狂います。) >ROUND(SUM(MOD(労働時間,100)) / 60, 2) 分の部分は、100で割った余りの部分。合計してから、60で割って時間へ直す。
その他の回答 (2)
- venzou
- ベストアンサー率71% (311/435)
>無理にSQLでやる必要もないと思うのですが。 私は、SQLを使う方に賛成します。 SQLを使う理由は、 サーバで集計して、結果のみをクライアントに渡すので、通信コストが減る。 これが一番大きい理由だと思います。特に集計するデータの量が多い場合は、SQLの方がレスポンスが良くなるはずです。サーバとクライアントがネットワークを経由している場合は、かなり差が出ると思います。サーバとクライアントが同一PC内で動いている場合でも、アプリケーション間の通信によるロスが有りますので、SQLより重くなるのではないでしょうか? 次に、SQLは非手続型言語ななので、数行のSQL文で集計できます。プログラムを書くよりは簡素に書けます。コーディングの時間も減ります。(もちろん、SQLに慣れている人の場合ですが) 逆に、SQL使わず、プログラムで集計するメリットは?>#2さん
- galluda
- ベストアンサー率35% (440/1242)
がると申します。エンジニアです。 …最近この手の質問にいつも同じ回答を書いて恐縮なのですが。 SQLではなく、プログラム側で処理されてみては如何でしょうか? 無理にSQLでやる必要もないと思うのですが。
お礼
galluda様、ご返答ありがとうございます。 >…最近この手の質問にいつも同じ回答を書いて 過去スレに同じ様な質問及び回答があったのですね… 申し訳ありません、調べるのを怠っておりました。 プログラム側(PHP側)での処理を知らないので、自分なりに考えて SQL文を組みました。 DBに入っている値なのでDB上で計算させて表示だけさせれば良いと いう判断があったからです。 もしこの考えに間違い等があれば、ご指摘頂ければ幸いです。
お礼
venzou様、訂正及びご返答ありがとうございます。 明日早速試してみます。 参考になる意見ありがとうございます。 明日結果をご報告します。
補足
venzou様、ありがとうございます。 ご指南頂いたコードを望む処理を実現する事が出来ました。 感謝しております。 ありがとうございました。