Skip to content

Analytics examples

Example queries against the CDM fact layer, especially environmental_observations.fact_bird_observation.

Daily species richness

SELECT
  observation_date,
  COUNT(DISTINCT species_code) AS species_richness,
  COUNT(*) AS observation_rows,
  SUM(COALESCE(observation_count, 0)) AS observed_birds
FROM environmental_observations.fact_bird_observation
GROUP BY observation_date
ORDER BY observation_date;

Notable observations by species

SELECT
  s.common_name,
  s.scientific_name,
  COUNT(*) AS notable_observation_rows
FROM environmental_observations.fact_bird_observation f
JOIN environmental_observations.dim_species s
  ON s.species_sk = f.species_sk
WHERE f.is_notable
GROUP BY s.common_name, s.scientific_name
ORDER BY notable_observation_rows DESC;

Weather observations by station and datatype

SELECT
  w.observation_date,
  st.station_name,
  w.datatype,
  AVG(w.value) AS avg_value
FROM environmental_observations.fact_weather_observation w
JOIN environmental_observations.dim_weather_station st
  ON st.weather_station_sk = w.weather_station_sk
GROUP BY w.observation_date, st.station_name, w.datatype
ORDER BY w.observation_date, st.station_name, w.datatype;

Streamflow observations by site

SELECT
  f.observation_date,
  s.site_name,
  f.parameter_cd,
  AVG(f.value) AS avg_value
FROM environmental_observations.fact_streamflow_observation f
JOIN environmental_observations.dim_streamgage_site s
  ON s.streamgage_site_sk = f.streamgage_site_sk
GROUP BY f.observation_date, s.site_name, f.parameter_cd
ORDER BY f.observation_date, s.site_name, f.parameter_cd;

Earthquake events by day

SELECT
  DATE(event_time) AS event_date,
  COUNT(*) AS events,
  MAX(magnitude) AS max_magnitude
FROM environmental_observations.fact_earthquake_event
GROUP BY event_date
ORDER BY event_date;