jam-cloud/db/up/scores_report.sql

23 lines
1.5 KiB
SQL

-- TODO median is implemented as average until a suitable median function can be found.
create or replace function scores_report(begin_at timestamp, end_at timestamp)
returns table (from_city text, from_region text, from_country text, from_isp text, to_city text, to_region text, to_country text, to_isp text, min_score integer, max_score integer, mean_score numeric, median_score numeric)
as
$body$
select a.city as from_city, e.regionname as from_region, c.countryname as from_country, x.company as from_isp, b.city as to_city, f.regionname as to_region, d.countryname as to_country, y.company as to_isp, min(s.score) as min_score, max(s.score) as max_score, avg(s.score) as mean_score, avg(s.score) as median_score
from scores s
join geoiplocations a on a.locid = (s.alocidispid / 1000000)
join geoiplocations b on b.locid = (s.blocidispid / 1000000)
join countries c on c.countrycode = a.countrycode
join countries d on d.countrycode = b.countrycode
join regions e on e.countrycode = a.countrycode and e.region = a.region
join regions f on f.countrycode = b.countrycode and f.region = b.region
join jamcompany x on x.coid = (s.alocidispid % 1000000)
join jamcompany y on y.coid = (s.blocidispid % 1000000)
where s.scorer = 0 and s.score_dt between begin_at and end_at
group by a.city, e.regionname, c.countryname, x.company, b.city, f.regionname, d.countryname, y.company;
$body$
language sql;
-- select * from scores_report(current_timestamp::timestamp, current_timestamp::timestamp);