Advanced: 03 Site coverage summary.sql

File 03 Site coverage summary.sql, 1.4 KB (added by 231139, 10 days ago)
Line 
1-- Management summary and QGIS point layer. Geometry: location.
2CREATE OR REPLACE VIEW public.v_site_coverage_summary AS
3WITH coverage_stats AS
4(
5 SELECT
6 ns.site_id,
7 count(DISTINCT ts.sector_id) AS sector_count,
8 count(DISTINCT cz.coverage_zone_id) AS coverage_zone_count,
9 round(avg(cz.signal_quality_score), 2) AS avg_signal_quality,
10 round(
11 (
12 ST_Area(ST_Union(cz.coverage_area)::geography) / 1000000.0
13 )::numeric,
14 2
15 ) AS coverage_area_sq_km
16 FROM public.network_sites ns
17 LEFT JOIN public.cell_towers ct ON ct.site_id = ns.site_id
18 LEFT JOIN public.tower_sectors ts ON ts.tower_id = ct.tower_id
19 LEFT JOIN public.coverage_zones cz ON cz.sector_id = ts.sector_id
20 GROUP BY ns.site_id
21),
22outage_stats AS
23(
24 SELECT site_id, count(*) AS open_outage_count
25 FROM public.outages
26 WHERE status = 'open'
27 GROUP BY site_id
28)
29SELECT
30 ns.site_id,
31 ns.site_code,
32 ns.site_name,
33 ns.region,
34 ns.status,
35 ns.latitude,
36 ns.longitude,
37 ns.location,
38 coalesce(cs.sector_count, 0) AS sector_count,
39 coalesce(cs.coverage_zone_count, 0) AS coverage_zone_count,
40 cs.avg_signal_quality,
41 cs.coverage_area_sq_km,
42 coalesce(os.open_outage_count, 0) AS open_outage_count
43FROM public.network_sites ns
44LEFT JOIN coverage_stats cs ON cs.site_id = ns.site_id
45LEFT JOIN outage_stats os ON os.site_id = ns.site_id;