Mikkel84
10/8/2018 - 7:23 AM

[pattern matching] #SQL #DB #SQLite #Database

[pattern matching] #SQL #DB #SQLite #Database

--Map value according to conditions
-- applies value of the first TRUE condition (from top to bottom of CASE statement)
---

SELECT report_code, year, month, day, wind_spped,

CASE
    WHEN wind_speed >= 40 THEN 'HIGH'
    WHEN wind_speed >= 30 AND wind_speed < 40 THEN 'MODERATE'
    ELSE 'LOW'
END as wind_severity,
FROM station_data


-- Grouping by mapped data
SELECT year,
CASE
    WHEN wind_speed >= 40 THEN 'HIGH'
    WHEN wind_speed >= 30 THEN 'MODERATE'
    ELSE 'LOW'
END as wind_severity,
COUNT(*) as record_count
FROM station_data
GROUP BY 1, 2


-- Zero/Null Trick
SELECT year, month,
SUM(CASE WHEN tornado = 1 THEN precipitation ELSE 0 END) as tornado_precipitation,
SUM(CASE WHEN tornado = 0 THEN precipitation ELSE 0 END) as non_tornado_precipitation
FROM data
GROUP BY year, month


SELECT month,
AVG(CASE WHEN rain OR hail THEN temp ELSE NULL END) AS avg_pre_temp,
AVG(CASE WHEN NOT (rain OR hail) THEN temp ELSE null END) as avg_non_pre_temp,
FROM data
WHERE year > 2000
GROUP BY month