Untitled
unknown
plain_text
2 years ago
7.6 kB
5
Indexable
---3 --I SELECT first_year FROM inventory WHERE element = 'PRCP' ORDER BY first_year ASC LIMIT 1; --II SELECT s.id, s.name FROM station AS s JOIN inventory AS i ON s.id = i.station AND i.first_year = ( SELECT MIN(first_year) FROM inventory WHERE element = 'PRCP' ); --III SELECT c.name AS continent, COUNT(*) AS count FROM Station AS s, Country AS p, Continent AS c WHERE s.country = p.fips AND p.continent = c.cc GROUP BY c.name ORDER BY count DESC; --IV SELECT YEAR(date_id) AS year, AVG(TMAX) AS avg_max_temp FROM Observation AS o, Station AS s WHERE o.station = s.id AND s.country = 'PO' GROUP BY YEAR(date_id) ORDER BY YEAR(date_id) ASC; --V SELECT MONTH(date_id) AS month, AVG(PRCP) AS precipitation, MAX(TMAX) AS max_temp, MIN(TMIN) AS min_temp, MAX(TMAX) - MIN(TMIN) AS temp_amplitude FROM Observation AS o, Station AS s WHERE o.date_id >= 2013-01-01 AND o.station = s.id AND s.country = 'UK' GROUP BY MONTH(date_id) ORDER BY MONTH ASC; --VI SELECT AVG(CASE WHEN YEAR(date_id) = 2021 THEN PRCP END) - AVG(CASE WHEN YEAR(date_id) = 2006 THEN PRCP END) AS diff_avg_precip, AVG(CASE WHEN YEAR(date_id) = 2021 THEN TMAX END) - AVG(CASE WHEN YEAR(date_id) = 2006 THEN TMAX END) AS diff_max_temp, AVG(CASE WHEN YEAR(date_id) = 2021 THEN TMIN END) - AVG(CASE WHEN YEAR(date_id) = 2006 THEN TMIN END) AS diff_min_temp FROM Observation AS o, Station AS s WHERE YEAR(date_id) IN (2006,2021) AND o.station = s.id AND s.country = 'UK'; ---4 --I dimtime SELECT date_id AS date, year(date_id) AS year, quarter(date_id) AS quarter, month(date_id) AS month, day(date_id) AS day, dayofweek(date_id) AS day_week, dayofyear(date_id) AS day_year, (CASE WHEN (day(date_id)>=21 AND month(date_id)=12) OR (month(date_id)<3) OR (month(date_id)=3 AND day(date_id)<21) THEN "winter" WHEN (day(date_id)>=21 AND month(date_id)=3) OR (month(date_id)<6 AND month(date_id)>3) OR (month(date_id)=6 AND day(date_id)<21) THEN "spring" WHEN (day(date_id)>=21 AND month(date_id)=6) OR (month(date_id)>6 AND month(date_id)<9) OR (month(date_id)=9 AND day(date_id)<23) THEN "summer" ELSE "autumn" END) AS season FROM observation ORDER BY date_id ASC; --II dimstation SELECT station.id AS id, station.name AS name, CASE WHEN country.fips = 'US' THEN state.alias ELSE 'XX' END AS state_alias, CASE WHEN country.fips = 'US' THEN state.name ELSE 'not applicable' END AS state_name, CASE WHEN country.fips = 'US' THEN state.population ELSE 0 END AS state_population, CASE WHEN country.fips = 'US' THEN state.total_area ELSE 0 END AS state_total_area, CASE WHEN country.fips = 'US' THEN state.land_area ELSE 0 END AS state_land_area, CASE WHEN country.fips = 'US' THEN state.water_area ELSE 0 END AS state_water_area, CASE WHEN country.fips = 'US' THEN state.nr_reps ELSE 0 END AS state_nr_reps, country.fips AS country_fips, country.name AS country_name, country.license_plate AS country_license_plate, country.domain AS country_domain, continent.cc AS continent_code, continent.name AS continent_name FROM station JOIN country ON station.country = country.fips JOIN continent ON country.continent = continent.cc JOIN state ON station.state = state.alias; --III dimelement SELECT ROW_NUMBER() OVER (ORDER BY name) AS id, name, property, description, unit FROM element; --IV factobservation SELECT * FROM ( SELECT o.date_id, o.station AS station_id, e.id AS element_id, IFNULL(o.PRCP,0) AS value FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) AS id, name, property, description, unit FROM element) AS e JOIN observation AS o ON e.name = 'PRCP' UNION ALL SELECT o.date_id, o.station AS station_id, e.id AS element_id, IFNULL(o.TMAX,0) AS value FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) AS id, name, property, description, unit FROM element) AS e JOIN observation AS o ON e.name = 'TMAX' UNION ALL SELECT o.date_id, o.station AS station_id, e.id AS element_id, IFNULL(o.TMIN,0) AS value FROM (SELECT ROW_NUMBER() OVER (ORDER BY name) AS id, name, property, description, unit FROM element) AS e JOIN observation AS o ON e.name = 'TMIN' ) AS fo ORDER BY station_id, element_id, date_id; ---5 --I SELECT t.year AS year, AVG(o.value) AS avg_prcp FROM factobservation AS o JOIN dimtime AS t ON o.time_id = t.date_id JOIN dimelement AS e ON o.element_id = e.id AND e.name = 'PRCP' JOIN dimstation AS s ON o.station_id = s.id AND s.country_name = 'Portugal' GROUP BY year ORDER BY year ASC; --II SELECT s.country_name AS country, t.year AS year, AVG(o.value) AS avg_max_temp FROM factobservation AS o JOIN dimstation AS s ON o.station_id = s.id JOIN dimelement AS e ON o.element_id = e.id AND e.name = 'TMAX' JOIN dimtime AS t ON o.time_id = t.date_id GROUP BY country, year ORDER BY avg_max_temp DESC LIMIT 1; --III SELECT t.day_week AS weekday, t.year AS year, AVG(o.value) AS avg_prcp FROM factobservation AS o JOIN dimtime AS t ON o.time_id = t.date_id JOIN dimelement AS e ON o.element_id = e.id AND e.name = 'PRCP' GROUP BY weekday, year ORDER BY avg_prcp DESC LIMIT 1; --IV SELECT element, AVG(num_obs) AS avg_number_obs FROM ( SELECT s.continent_name as continent, e.name as element, COUNT(*) AS num_obs FROM factobservation AS o JOIN dimelement AS e ON o.element_id = e.id JOIN dimstation AS s ON o.station_id = s.id GROUP BY continent, element ) AS obs_counts GROUP BY element; --V WITH TMINSelect as ( SELECT s.country_name AS country,t.month as month, o.time_id as time, o.value as value FROM factobservation AS o JOIN dimelement AS e ON o.element_id = e.id JOIN dimstation AS s ON o.station_id = s.id JOIN dimtime AS t ON o.time_id = t.date_id WHERE e.name = 'TMIN' ), TMAXSelect as ( SELECT s.country_name AS country,t.month as month, o.time_id as time, o.value as value FROM factobservation AS o JOIN dimelement AS e ON o.element_id = e.id JOIN dimstation AS s ON o.station_id = s.id JOIN dimtime AS t ON o.time_id = t.date_id WHERE e.name = 'TMAX' ), AveragesPerMonth AS ( SELECT AVG(TMAXSelect.VALUE - TMINSelect.Value) AS dif, TMAXSelect.country AS fCountry, TMAXSelect.month as fMonth FROM TMAXSelect,TMINSelect WHERE TMAXSelect.country = TMINSelect.country AND TMAXSelect.time = TMINSelect.time GROUP BY fCountry, fMonth ) SELECT fCountry AS Country, fMonth AS Month, dif AS TemperatureRange FROM AveragesPerMonth AS AVG1 WHERE dif = (SELECT MAX(dif) FROM AveragesPerMonth AS AVG2 WHERE AVG2.fCountry = AVG1.fCountry) ORDER BY Country; --VI SELECT AVG(CASE WHEN t.year = 2006 AND e.name = "PRCP" THEN o.value END) - AVG(CASE WHEN t.year = 2021 AND e.name = "PRCP" THEN o.value END) AS diff_PCRP, AVG(CASE WHEN t.year = 2006 AND e.name = "TMAX" THEN o.value end) - AVG(CASE WHEN t.year = 2021 AND e.name = "TMAX" THEN o.value END) AS diff_TMAX, AVG(CASE WHEN t.year = 2006 AND e.name = "TMIN" THEN o.value END) - AVG(CASE WHEN t.year = 2021 AND e.name = "TMIN" THEN o.value END) AS diff_TMIN FROM factobservation AS o JOIN dimelement AS e ON o.element_id = e.id JOIN dimstation AS s ON o.station_id = s.id JOIN dimtime AS t ON o.time_id = t.date_id WHERE s.country_name = "United Kingdom";
Editor is loading...