Du json pour structurer nos observations

WITH DATA AS (
    SELECT 10312 AS id_obs, 'tetrax tetrax' AS espece, 'mathieu' AS observateur, '{"mâles": 12, "femelles": 3, "oeufs": 7}'::jsonb AS effectif
    UNION
    SELECT 15021 AS id_obs, 'zerynthia rumina' AS espece, 'paul' AS observateur, '{"mâles": 3, "immatures": 3, "larves": 7}'::jsonb AS effectif
    UNION
    SELECT 15897 AS id_obs, 'tetrax tetrax' AS espece, 'paul' AS observateur, '{"mâles": 4, "immatures": 15}'::jsonb AS effectif
)
/* les données qui contiennent des obs de mâles */
--SELECT id_obs, observateur, effectif->'larves' AS nb_larves, effectif->'mâles' AS nb_males from data --WHERE effectif ? 'larves'
/* les effectifs des différents objets observés (mâles, femelle, immature, oeufs) en colonne */
--SELECT id_obs, observateur, effectif, (effectif->>'larves')::integer AS nb_larves, (effectif->>'mâles')::integer AS nb_males, (effectif->>'femelles')::integer AS nb_femelles, (effectif->>'oeufs')::integer AS nb_oeufs from data --WHERE effectif ? 'larves'
/* des agrégations */
SELECT COUNT(id_obs), espece, string_agg(DISTINCT observateur,',' ORDER BY observateur), SUM((effectif->>'larves')::INTEGER) AS nb_larves, SUM((effectif->>'mâles')::INTEGER) AS nb_males FROM DATA  GROUP BY espece --WHERE effectif ? 'larves'

Les contenus des sites sig.cenlr.org et si.cenlr.org sont mis à disposition selon
les termes de la licence Creative Commons Attribution 3.0 France

Licence Creative Commons