SQL

◆ID10が当てはまるものすべて出力

SELECT COALESCE
((apply_end_time - apply_start_time)::time,'00:00'::time)
 - rest_time - COALESCE(over_rest_time,'00:00'::time) as 
work_time
FROM trn_work_time
WHERE user_id=10;

★サブクエリにして合計を算出出力

SELECT sum(work_time) from 
(SELECT 
  COALESCE((apply_end_time - 
apply_start_time)::interval,'00:00'::interval) 
   - COALESCE(rest_time::interval,'00:00'::interval)
   - COALESCE(over_rest_time::interval,'00:00'::interval)
    as work_time
FROM trn_work_time
WHERE user_id=10) AS work_time;


★group byで合計を求める

select
 SUM(COALESCE((apply_end_time -
apply_start_time),'00:00'::interval)
     - COALESCE(rest_time::interval,'00:00'::interval)
     - COALESCE(over_rest_time::interval,
    '00:00'::interval)
     )
FROM trn_work_time
WHERE user_id=10
group by user_id;

★間の秒数を表示

select extract( epoch FROM 
('24:00'::interval+ '24:00'::interval )) ;

★秒数を時間に変換して表示

select extract( epoch FROM 
('24:00'::interval+ '24:00'::interval ))* interval '1 second';

★秒数の引き算を表示

select extract( epoch FROM ('2009-01-31 00:00'::timestamp -
 '2009-01-29 00:00'::timestamp));

★サブクエリを使って×

select extract( epoch FROM (
select SUM(COALESCE((apply_end_time - 
apply_start_time),'00:00'::interval) 
     - COALESCE(rest_time::interval,'00:00'::interval)
     - COALESCE(over_rest_time::interval,
    '00:00'::interval)
     )
FROM trn_work_time
WHERE user_id=10
group by user_id
))* interval '1 second';

★サブクエリを使わずに○

select extract( epoch FROM (
SUM(COALESCE((apply_end_time - 
apply_start_time),'00:00'::interval)
     - COALESCE(rest_time::interval,'00:00'::interval)
     - COALESCE(over_rest_time::interval,'00:00'::interval)
     )))* interval '1 second'
FROM trn_work_time
WHERE user_id=10
group by user_id;