44
Consultas a base de datos de SISNAP

Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Consultas a base de datos de SISNAP

Page 2: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

i. Control del documento

ii. Histórico de revisiones

2

Versión Elaboración Revisión AprobaciónNombre Fecha Nombre Fecha Nombre Fecha

1.0.0 Leonardo Lazbal 22-04-2015 Rosina Seguí

Versión Notas1.0.0 Versión inicial del documento

Page 3: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

Tabla de ContenidosIntroducción.....................................................................................................................................4Requerimientos y consultas a base de datos SISNAP.....................................................................4

1) Cantidad de especies nativas y lista........................................................................................4Descripción........................................................................................................................4Función cantidad_especies_nativas...................................................................................4Función lista_especies_nativas..........................................................................................6

2) Cantidad de especies prioritarias para la conservación y lista................................................7Descripción........................................................................................................................7Función cantidad_especies_prioritarias.............................................................................8Función lista_especies_prioritarias....................................................................................9

3) Cantidad de especies prioritarias cuya inclusión en el SNAP es necesaria como medida de conservación y lista...................................................................................................................12

Descripción......................................................................................................................12Función cant_estatus_especies_por_grupo......................................................................12Función lista_estatus_especies_snap_por_grupo............................................................14

4) Cantidad de especies amenazadas y lista..............................................................................16Descripción......................................................................................................................16Función cantidad_estatus_especiesamenazadas..............................................................17Función lista_estatus_especiesamenazadas.....................................................................18

5) Cantidad de especies con criterio IUCN más preocupante y lista........................................20Descripción......................................................................................................................20Función cantidad_especies_uicn.....................................................................................20Funcción lista_estatus_especies_UICN...........................................................................24

6) Cantidad de especies exóticas invasoras definidas por el Comité de Especies Exóticas Invasoras y lista.........................................................................................................................26

Descripción......................................................................................................................26Función cantidad_especies_exoticas_invasoras..............................................................26Función lista_especies_exoticas_invasoras.....................................................................27

7) Estatus de las especies en la base de datos...........................................................................29Descripción......................................................................................................................29Función estatus_especies_1.............................................................................................30

8) Actualización de las especies en la base de datos.................................................................32Descripción......................................................................................................................32Función estatus_especies.................................................................................................33

9) Datos abiertos.......................................................................................................................35Descripción......................................................................................................................35Función especies_open_data...........................................................................................35

3

Page 4: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

Introducción

Este documento contiene requerimientos de consultas a la base de datos de SISNAP y las funciones de consultas generadas a partir de esos requerimientos. Esas funciones de consultas se agregan a la base de datos PostgreSQL de SISNAP para que sean consumidas desde cualquier aplicativo que tenga conexión a esa base de datos.

Requerimientos y consultas a base de datos SISNAP

1) Cantidad de especies nativas y lista

Descripción

Todas las especies de la base de datos excepto aquellas que dicen en el campo 'exoticas'=true

OR en el campo 'atributos' son “Exótica invasora (DINAMA)...” OR “Exótica asilvestrada...”.

Mostrar:

a) solamente el número

b) una tabla en donde aparezcan: 'grupo';'nombre científico';'nombre común'. Colocar un filtro

dinámico en una lista desplegables para presentar sólo las especies de un 'grupo' determinado.

bd especies

Función cantidad_especies_nativas

--DROP FUNCTION cantidad_especies_nativas();CREATE OR REPLACE FUNCTION cantidad_especies_nativas() RETURNS TABLE(cantidad_especies_nativas bigint) AS $$

BEGIN

RETURN QUERY

SELECT distinct count(e1.*) cantidad_especies_nativas

4

Page 5: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

FROM biodiversidad_especie e1WHERE e1.id IN (SELECT e.id

FROM biodiversidad_especie e

-- grupoINNER JOIN biodiversidad_genero g ON g.id = e.genero_idINNER JOIN biodiversidad_familia f ON f.id = g.familia_idINNER JOIN biodiversidad_orden o ON o.id = f.orden_idINNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- nombre comunLEFT JOIN biodiversidad_especie_nombres_comunes enc ON enc.especie_id = e.idLEFT JOIN biodiversidad_nombrecomun nc ON nc.id = enc.nombrecomun_id

WHERE (e.exotica = false) OR (e.id in(SELECT ea.especie_idFROM biodiversidad_especie_atributos eaINNER JOIN biodiversidad_atributo a ON (ea.atributo_id = a.id) AND (a.id <> 4 AND a.id <> 6)limit 1)));END$$ LANGUAGE plpgsql;

– select * from cantidad_especies_nativas();

5

Page 6: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

Función lista_especies_nativas

--DROP FUNCTION lista_especies_nativas();CREATE OR REPLACE FUNCTION lista_especies_nativas() RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun character varying(200)) AS $$

BEGIN

RETURN QUERY

SELECT gr.nombre AS grupo,CASE WHEN (SELECT g.nombre FROM biodiversidad_genero gWHERE e.genero_id = g.id) = '' then coalesce(e.epiteto,' ')

ELSE

coalesce((SELECT g.nombre FROM biodiversidad_genero gWHERE e.genero_id = g.id) )||' '||coalesce(e.epiteto,' ')

ENDAS nombre_cientifico--, e.epiteto, CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc WHERE nc.id IN (SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes encWHERE enc.especie_id = e.id) limit 1)= '' THEN ''

ELSE

6

Page 7: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc WHERE nc.id IN (SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes encWHERE enc.especie_id = e.id) limit 1)

ENDAS nombre_comun

FROM biodiversidad_especie e

-- grupoINNER JOIN biodiversidad_genero g ON g.id = e.genero_idINNER JOIN biodiversidad_familia f ON f.id = g.familia_idINNER JOIN biodiversidad_orden o ON o.id = f.orden_idINNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE (e.exotica = false) OR (e.id in(SELECT ea.especie_idFROM biodiversidad_especie_atributos eaINNER JOIN biodiversidad_atributo a ON (ea.atributo_id = a.id) AND (a.id <> 4 AND a.id <> 6)limit 1))ORDER BY grupo, nombre_cientifico, nombre_comun;

END$$ LANGUAGE plpgsql;

– select * from lista_especies_nativas();

2) Cantidad de especies prioritarias para la conservación y lista

Descripción

Todas las especies que tengan al menos 1 criterio seleccionado en el campo que registra:

“Criterios utilizados para la identificación de especies prioritarias para la conservación en

Uruguay”. Mostrar:

7

Page 8: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

a) solamente el número

b) una tabla en donde aparezcan: 'grupo';'nombre científico';'nombre común'; 'si además es

prioritaria en el snap, colocar -snap-'. Colocar un filtro dinámico en una lista desplegables para

presentar sólo las especies de un 'grupo' determinado.

bd especies

Función cantidad_especies_prioritarias

--DROP FUNCTION cantidad_especies_prioritarias();

CREATE OR REPLACE FUNCTION cantidad_especies_prioritarias()

RETURNS TABLE(cantidad_especies_prioritarias bigint) AS $$

BEGIN

RETURN QUERY

SELECT DISTINCT count(e1.*) cantidad_especies_prioritarias

FROM biodiversidad_especie e1

WHERE e1.id IN

(SELECT DISTINCT e.id

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE e.prioritaria = true

);

8

Page 9: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

END

$$ LANGUAGE plpgsql;

Función lista_especies_prioritarias

-- DROP FUNCTION lista_especies_prioritarias();

CREATE OR REPLACE FUNCTION lista_especies_prioritarias()

RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun text) AS $$

BEGIN

RETURN QUERY

SELECT DISTINCT

gr.nombre AS grupo

,

CASE WHEN

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

) = ''

then coalesce(e.epiteto,' ')

ELSE

coalesce(

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

)

)

9

Page 10: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

||' '||

coalesce(e.epiteto,' ')

END

AS nombre_cientifico

,

CASE WHEN

(SELECT DISTINCT nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT DISTINCT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

= '' THEN ''

ELSE

(SELECT DISTINCT nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT DISTINCT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

END

--,

|| coalesce((CASE WHEN e.prioritaria = true THEN ' -snap-' ELSE '' END) )

AS nombre_comun

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

10

Page 11: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE e.prioritaria = true

ORDER BY grupo, nombre_cientifico, nombre_comun;

END

$$ LANGUAGE plpgsql;

11

Page 12: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

3) Cantidad de especies prioritarias cuya inclusión en el SNAP es necesaria como medida de conservación y lista

Descripción

Todas las especies que en el 'Status de Especie' en el campo 'Criterios'=“(Grupo*) SNAP...”.

Mostrar:

a) solamente el número

b) una tabla en donde aparezcan: 'grupo';'nombre científico';'nombre común'. Colocar un filtro

dinámico en una lista desplegables para presentar sólo las especies de un 'grupo' determinado.

bd especies

NOTA: *Grupo se refiere al valor que adquiere este campo. Dependiendo del grupo biológico, el

criterio puede empezar con (Anfibios) SNAP...; (Mamíferos) SNAP...; etc. O sea que hay que tomar

en cuenta, al la fecha, 8 ids de criterios, tantos como grupos.

Función cant_estatus_especies_por_grupo

--DROP FUNCTION cant_estatus_especies_por_grupo(grupo_aux character varying(200));

CREATE OR REPLACE FUNCTION cant_estatus_especies_por_grupo(grupo_aux character varying(200))

RETURNS TABLE(cantidad_especies_prioritarias bigint) AS $$

BEGIN

RETURN QUERY

SELECT count(e1.*) cant_estatus_especies_por_grupo

FROM biodiversidad_especie e1

WHERE e1.id IN

(SELECT DISTINCT e.id

12

Page 13: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON (gr.id = o.grupo_id) AND (LOWER(gr.nombre) like LOWER('%'||grupo_aux||'%'))

WHERE e.id IN

(

SELECT DISTINCT ee.especie_id FROM biodiversidad_estatusespecie ee

WHERE ee.especie_id = e.id AND ee.fecha=

(SELECT MAX(ee2.fecha)

FROM biodiversidad_estatusespecie ee2

WHERE ee2.especie_id=ee.especie_id --limit 1 order by 1 desc

)

AND ee.id IN

(

SELECT DISTINCT ee_c.estatusespecie_id FROM biodiversidad_estatusespecie_criterios ee_c

WHERE ee_c.estatusespecie_id = ee.id AND ee_c.criteriodegrupo_id = 9

)

)

);

END

$$ LANGUAGE plpgsql;

13

Page 14: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

Función lista_estatus_especies_snap_por_grupo

--DROP FUNCTION lista_estatus_especies_snap_por_grupo(grupo_aux character varying(200));

CREATE OR REPLACE FUNCTION lista_estatus_especies_snap_por_grupo(grupo_aux character varying(200))

RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun character varying(200)) AS $$

BEGIN

RETURN QUERY

SELECT DISTINCT gr.nombre AS grupo

,

CASE WHEN

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

) = ''

then coalesce(e.epiteto,' ')

ELSE

coalesce(

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

)

)

||' '||

coalesce(e.epiteto,' ')

END

14

Page 15: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

AS nombre_cientifico

,

CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

= '' THEN ''

ELSE

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

END

AS nombre_comun

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON (gr.id = o.grupo_id) AND (LOWER(gr.nombre) like LOWER('%'||grupo_aux||'%'))

WHERE e.id IN

(

SELECT DISTINCT ee.especie_id FROM biodiversidad_estatusespecie ee

WHERE ee.especie_id = e.id AND ee.fecha=

15

Page 16: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

(SELECT MAX(ee2.fecha)

FROM biodiversidad_estatusespecie ee2

WHERE ee2.especie_id=ee.especie_id --limit 1 order by 1 desc

)

AND ee.id IN

(

SELECT DISTINCT ee_c.estatusespecie_id FROM biodiversidad_estatusespecie_criterios ee_c

WHERE ee_c.estatusespecie_id = ee.id AND ee_c.criteriodegrupo_id = 9

)

)

/*

INNER JOIN biodiversidad_estatusespecie ee ON (ee.especie_id = e.id)

INNER JOIN biodiversidad_estatusespecie_criterios ee_c ON ee_c.estatusespecie_id = ee.id

INNER JOIN biodiversidad_criteriodegrupo c_gr ON ee_c.criteriodegrupo_id = c_gr.id AND c_gr.criterio_id = 9*/

--INNER JOIN biodiversidad_criterio c ON c_gr.criterio_id = c.id AND c.id = 9

ORDER BY grupo, nombre_cientifico, nombre_comun;

END

$$ LANGUAGE plpgsql;

4) Cantidad de especies amenazadas y lista

Descripción

Todas las especies que en el 'Status de Especie' en el campo 'Criterios'=“(Grupo*)

Amenazada...”. Mostrar:

a) solamente el número

16

Page 17: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

b) una tabla en donde aparezcan: 'grupo';'nombre científico';'nombre común'. Colocar un filtro

dinámico en una lista desplegables para presentar sólo las especies de un 'grupo' determinado.

bd especies

NOTA: *Grupo se refiere al valor que adquiere este campo. Dependiendo del grupo biológico, el

criterio puede empezar con (Anfibios) Amenazada...; (Mamíferos) Amenazada...; etc. O sea que hay

que tomar en cuenta, al la fecha, 8 ids de criterios, tantos como grupos.

Función cantidad_estatus_especiesamenazadas

--DROP FUNCTION cantidad_estatus_especiesamenazadas();

CREATE OR REPLACE FUNCTION cantidad_estatus_especiesamenazadas()

RETURNS TABLE(cantidad_estatus_especiesamenazadas bigint) AS $$

BEGIN

RETURN QUERY

SELECT distinct count(e1.*) cantidad_estatus_especiesamenazadas

FROM biodiversidad_especie e1

WHERE e1.id IN

(SELECT DISTINCT e.id

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE e.amenazada = true

17

Page 18: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

)

;

END

$$ LANGUAGE plpgsql;

Función lista_estatus_especiesamenazadas

--DROP FUNCTION lista_estatus_especiesamenazadas();

CREATE OR REPLACE FUNCTION lista_estatus_especiesamenazadas()

RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun character varying(200)) AS $$

BEGIN

RETURN QUERY

SELECT DISTINCT gr.nombre AS grupo

,

CASE WHEN

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

) = ''

then coalesce(e.epiteto,' ')

ELSE

coalesce(

(SELECT g.nombre FROM biodiversidad_genero g

18

Page 19: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

WHERE e.genero_id = g.id

)

)

||' '||

coalesce(e.epiteto,' ')

END

AS nombre_cientifico

,

CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id)

)

= '' THEN ''

ELSE

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id)

)

END

AS nombre_comun

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

19

Page 20: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE e.amenazada = true

ORDER BY grupo, nombre_cientifico, nombre_comun;

END

$$ LANGUAGE plpgsql;

5) Cantidad de especies con criterio IUCN más preocupante y lista

Descripción

Total de especies que tienen criterio IUCN Mundial y/o Regional ingresados como

CR+EN+VU. Mostrar:

a) solamente el número desglosado en mundial y regional (son dos números)

b) una tabla donde aparezcan: 'grupo';'nombre científico';'nombre común'; “IUCN (mundial o

regional)”; “criterio (CR, En ó VU). Colocar un filtro dinámico en una lista desplegables para

presentar sólo las especies de un 'grupo' determinado.

bd especies

Función cantidad_especies_uicn

--DROP FUNCTION cantidad_detalles_especies_uicn();

CREATE OR REPLACE FUNCTION cantidad_detalles_especies_uicn()

RETURNS TABLE(id integer, descripcion text, regional bigint, mundial bigint) AS $$

BEGIN

20

Page 21: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

RETURN QUERY

SELECT 1, 'CR'

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_regional_id) AND (u.codigo = 'CR'))

GROUP BY u.codigo)

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_mundial_id) AND (u.codigo = 'CR'))

GROUP BY u.codigo)

UNION

SELECT 2, 'EN'

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

21

Page 22: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_regional_id) AND (u.codigo = 'EN'))

GROUP BY u.codigo)

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_mundial_id) AND (u.codigo = 'EN'))

GROUP BY u.codigo)

UNION

SELECT 3, 'VU'

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_regional_id) AND (u.codigo = 'VU'))

GROUP BY u.codigo)

,(SELECT distinct COUNT(e.id) FROM biodiversidad_especie e

-- grupo

22

Page 23: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_mundial_id) AND (u.codigo = 'VU'))

GROUP BY u.codigo)

UNION

SELECT 4, 'TOTALES'

, (SELECT distinct count(e1.*)

FROM biodiversidad_especie e1 WHERE e1.id IN

(SELECT distinct e.id FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_regional_id) AND

(u.codigo = 'CR' OR u.codigo = 'EN' OR u.codigo = 'VU'))))

, (SELECT distinct count(e1.*)

FROM biodiversidad_especie e1 WHERE e1.id IN

(SELECT distinct e.id FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

23

Page 24: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

-- uicn

INNER JOIN biodiversidad_uicn u ON

((u.id = e.uicn_mundial_id) AND

(u.codigo = 'CR' OR u.codigo = 'EN' OR u.codigo = 'VU'))))

order by 1;

END

$$ LANGUAGE plpgsql;

Funcción lista_estatus_especies_UICN

--DROP FUNCTION lista_estatus_especies_UICN();

CREATE OR REPLACE FUNCTION lista_estatus_especies_UICN()

RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun character varying(200), IUCN_codigo text, IUCN_descripcion text) AS $$

BEGIN

RETURN QUERY

SELECT gr.nombre AS grupo

,

coalesce(g.nombre,' ') ||' '||

coalesce(e.epiteto,' ')

AS nombre_cientifico

,

CASE WHEN

(SELECT nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

24

Page 25: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

)

= '' THEN ''

ELSE

(SELECT nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

END

AS nombre_comun

, string_agg(u.codigo, ', ') IUCN_codigo

, string_agg(u.descripcion, ', ') IUCN_descripcion

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

-- uicn

INNER JOIN biodiversidad_uicn u ON

(

(u.id = e.uicn_regional_id) AND

(u.codigo = 'CR' OR u.codigo = 'EN' OR u.codigo = 'VU')

)

OR

(

(u.id = e.uicn_mundial_id)

AND (u.codigo = 'CR' OR u.codigo = 'EN' OR u.codigo = 'VU')

25

Page 26: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

)

GROUP BY e.id, grupo, nombre_cientifico--, u.descripcion

ORDER BY grupo, nombre_cientifico, nombre_comun

;

END

$$ LANGUAGE plpgsql;

6) Cantidad de especies exóticas invasoras definidas por el Comité de Especies Exóticas Invasoras y lista

Descripción

Todas las especies que en el campo 'atributos'=“Exótica invasora (DINAMA)...”. Mostrar:

a) solo el número

b) una tabla en donde aparezcan: 'grupo';'nombre científico';'nombre común'. Colocar un filtro

dinámico en una lista desplegables para presentar sólo las especies de un 'grupo' determinado.

bd especies

Función cantidad_especies_exoticas_invasoras

--DROP FUNCTION cantidad_especies_exoticas_invasoras();

CREATE OR REPLACE FUNCTION cantidad_especies_exoticas_invasoras()

RETURNS TABLE(cantidad_especies_exoticas_invasoras bigint) AS $$

BEGIN

RETURN QUERY

26

Page 27: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

SELECT distinct count(e1.*) cantidad_especies_exoticas_invasoras

FROM biodiversidad_especie e1

WHERE e1.id IN

(SELECT distinct e.id

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE /*(e.exotica = true) AND */(e.id in

(SELECT ea.especie_id

FROM biodiversidad_especie_atributos ea

INNER JOIN biodiversidad_atributo a ON (ea.atributo_id = a.id) AND

(a.id = 4)))

);

END

$$ LANGUAGE plpgsql;

Función lista_especies_exoticas_invasoras

--DROP FUNCTION lista_especies_exoticas_invasoras();CREATE OR REPLACE FUNCTION lista_especies_exoticas_invasoras()

RETURNS TABLE(grupo character varying(200), nombre_cientifico text, nombre_comun character varying(200)) AS $$

BEGIN

RETURN QUERY

27

Page 28: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

SELECT distinct gr.nombre AS grupo

,

CASE WHEN

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

) = ''

then coalesce(e.epiteto,' ')

ELSE

coalesce(

(SELECT g.nombre FROM biodiversidad_genero g

WHERE e.genero_id = g.id

)

)

||' '||

coalesce(e.epiteto,' ')

END

AS nombre_cientifico

,

CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

= '' THEN ''

ELSE

28

Page 29: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

END

AS nombre_comun

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

WHERE /*(e.exotica = true) AND */(e.id in

(SELECT ea.especie_id

FROM biodiversidad_especie_atributos ea

INNER JOIN biodiversidad_atributo a ON (ea.atributo_id = a.id) AND

(a.id = 4)))

ORDER BY grupo, nombre_cientifico, nombre_comun;

END

$$ LANGUAGE plpgsql;

7) Estatus de las especies en la base de datos

Descripción

Se trata de mostrar cuál es la actualización que tiene la base de datos con referencia a los

29

Page 30: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

criterios de conservación (incluyendo si es amenazada). Buscar la fecha más reciente y contar las especies que tienen esa fecha (fecha1) y calcular el porcentaje sobre el total de especies. Hacer lo mismo con la fecha anterior, más reciente (fecha2). Contar la cantidad de especies que no tienen fecha de actualización de estado. Traer como resultado de la búsqueda: “X% de especies con estado actualizado al 'fecha1'”; “X% de especies con estado actualizado al 'fecha2'”; “X% de especies cuyo estado no ha sido evaluado”.

Función estatus_especies_1

--DROP FUNCTION estatus_especies_1();CREATE OR REPLACE FUNCTION estatus_especies_1() RETURNS TABLE(cantidad_especies integer, cantidad_especies_actualizadas integer, porcentaje_especies_actualizadas integer

, cantidad_especies_sin_actualizar integer, porcentaje_especies_sin_actualizar integer, cantidad_especies_no_evaluadas integer, porcentaje_especies_no_evaluadas integer) AS $$

DECLAREcolumnNames RECORD;counter_ids RECORD;

var_percent1 integer;var_percent_greather1 integer;var_count_esp integer;var_1 integer;var_greather1 integer;cantidad_especies_no_evaluadas integer;

BEGIN

select into var_count_esp COUNT(e.id)FROM biodiversidad_especie e;

select into cantidad_especies_no_evaluadas COUNT(e.id)FROM biodiversidad_especie ewhere e.id not in(select distinct especie_id from biodiversidad_estatusespecie ee);

porcentaje_especies_no_evaluadas := (cantidad_especies_no_evaluadas * 100) / var_count_esp;

FOR columnNames IN SELECT * from pg_tables where tablename = 'tmptable1' LOOP DROP TABLE tmptable1 ;

30

Page 31: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

END LOOP;CREATE TABLE tmptable1 (especie_id_aux integer PRIMARY KEY);

EXECUTE 'ALTER TABLE tmptable1 ADD counter1 integer DEFAULT 0';--EXECUTE 'ALTER TABLE tmptable1 ADD percentage2 integer DEFAULT 0';

FOR counter_ids IN select ee.especie_id especie, COUNT(ee.especie_id) AS cantidad FROM biodiversidad_estatusespecie eegroup by ee.especie_idHAVING count(ee.*) = 1

LOOPEXECUTE 'INSERT INTO tmptable1 (especie_id_aux, counter1) VALUES (' ||

counter_ids.especie || ', ' || counter_ids.cantidad || ')';END LOOP;

select into var_1 count(*) from tmptable1;

var_percent1 := (var_1 * 100) / var_count_esp;

FOR counter_ids IN select ee.especie_id especie, COUNT(ee.especie_id) AS cantidad FROM biodiversidad_estatusespecie eegroup by ee.especie_idHAVING count(ee.*) = 1

LOOPEXECUTE 'UPDATE tmptable1 SET counter1 = ' || var_percent1 || ' WHERE

especie_id_aux = ' || counter_ids.especie;END LOOP ;

--------------------------------------------------------------------------------------------------------------------------

FOR columnNames IN SELECT * from pg_tables where tablename = 'tmptable2' LOOP DROP TABLE tmptable2; END LOOP;

CREATE TABLE tmptable2 (especie_id_aux integer PRIMARY KEY);

EXECUTE 'ALTER TABLE tmptable2 ADD counter2 integer DEFAULT 0';--EXECUTE 'ALTER TABLE tmptable1 ADD percentage2 integer DEFAULT 0';

FOR counter_ids IN select ee.especie_id especie, COUNT(ee.especie_id) AS cantidad FROM biodiversidad_estatusespecie ee

31

Page 32: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

group by ee.especie_idHAVING count(ee.*) > 1

LOOPEXECUTE 'INSERT INTO tmptable2 (especie_id_aux, counter2) VALUES (' ||

counter_ids.especie || ', ' || counter_ids.cantidad || ')';END LOOP;

select into var_greather1 count(*) from tmptable2;

var_percent_greather1 := (var_greather1 * 100) / var_count_esp;

FOR counter_ids IN select ee.especie_id especie, COUNT(ee.especie_id) AS cantidad FROM biodiversidad_estatusespecie eegroup by ee.especie_idHAVING count(ee.*) > 1

LOOPEXECUTE 'UPDATE tmptable2 SET counter2 = ' || var_percent_greather1 || ' WHERE

especie_id_aux = ' || counter_ids.especie;END LOOP ;

RETURN QUERYselect var_count_esp, var_greather1, var_percent_greather1, var_1 , var_percent1, cantidad_especies_no_evaluadas, porcentaje_especies_no_evaluadas;END;$$ LANGUAGE plpgsql;

– select * from estatus_especies_1();

8) Actualización de las especies en la base de datos

Descripción

Se trata de saber cuándo fue la última actualización y a qué se refirió. Consultar la fecha de la última actualización (ABM) de las acciones que se pueden hacer en la siguiente interfase de la aplicación de especies: “Documento añadido”; “Avistamiento”; Especies”; “Estatus especies”.

32

Page 33: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

Función estatus_especies

DROP FUNCTION estatus_especies();CREATE OR REPLACE FUNCTION estatus_especies() RETURNS TABLE(especie_id integer, fecha_actualizacion date, grupo character varying(200), nombre_cientifico character varying(200), nombre_comun character varying(200)) AS $$DECLARE

columnNames RECORD;counter_ids RECORD;

especie_id integer;var_percent1 integer;var_percent_greather1 integer;var_count_esp integer;var_1 integer;var_greather1 integer;

BEGIN FOR columnNames IN SELECT * from pg_tables where tablename = 'tmptable1'

LOOP DROP TABLE tmptable1 ; END LOOP;

CREATE TABLE tmptable1 (especie_id integer PRIMARY KEY);

EXECUTE 'ALTER TABLE tmptable1 ADD fecha date DEFAULT NULL';EXECUTE 'ALTER TABLE tmptable1 ADD nombre_cientifico character varying(200)

DEFAULT NULL';EXECUTE 'ALTER TABLE tmptable1 ADD nombre_comun character varying(200)

DEFAULT NULL';EXECUTE 'ALTER TABLE tmptable1 ADD grupo character varying(200) DEFAULT

NULL';

FOR counter_ids IN select ee.especie_id especie, max(ee.fecha) fechaFROM biodiversidad_estatusespecie eegroup by ee.especie_id--, ee.fechaorder by 1

LOOPEXECUTE 'INSERT INTO tmptable1 (especie_id, fecha) VALUES (' || counter_ids.especie

|| ', ''' || counter_ids.fecha || ''')';END LOOP;

FOR counter_ids IN select distinct e.id, gr.nombre AS grupo,

33

Page 34: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

CASE WHEN (SELECT g.nombre FROM biodiversidad_genero gWHERE e.genero_id = g.id) = '' then coalesce(e.epiteto,' ')

ELSE

coalesce((SELECT g.nombre FROM biodiversidad_genero gWHERE e.genero_id = g.id) )||' '||coalesce(e.epiteto,' ')

ENDAS nombre_cientifico, CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc WHERE nc.id IN (SELECT enc.nombrecomun_id FROM

biodiversidad_especie_nombres_comunes encWHERE enc.especie_id = e.id) limit 1)= '' THEN ''

ELSE(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc WHERE nc.id IN (SELECT enc.nombrecomun_id FROM

biodiversidad_especie_nombres_comunes encWHERE enc.especie_id = e.id) limit 1)

ENDAS nombre_comunFROM biodiversidad_especie eINNER JOIN tmptable1 ON tmptable1.especie_id = e.id

-- grupoINNER JOIN biodiversidad_genero g ON g.id = e.genero_idINNER JOIN biodiversidad_familia f ON f.id = g.familia_idINNER JOIN biodiversidad_orden o ON o.id = f.orden_id

34

Page 35: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

ORDER BY grupo, nombre_cientifico, nombre_comunLOOPEXECUTE 'UPDATE tmptable1 SET nombre_cientifico = ''' ||

coalesce(counter_ids.nombre_cientifico,' ') /*coalesce(counter_ids.epiteto,' ')||' '||coalesce(counter_ids.variedad,' ') */

|| ''', nombre_comun = ''' || coalesce(counter_ids.nombre_comun,'') || ''', grupo = ''' || coalesce(counter_ids.grupo,'')

|| ''' WHERE especie_id = ' || counter_ids.id;END LOOP ;

RETURN QUERYselect * from tmptable1;END;$$ LANGUAGE plpgsql;

-- select * from estatus_especies();

9) Datos abiertos

Descripción

Datos abiertos.

Función especies_open_data

--DROP FUNCTION especies_open_data();

CREATE OR REPLACE FUNCTION especies_open_data()

RETURNS TABLE(id integer, grupo character varying(30), orden character varying(30), familia character varying(30), genero character varying(30), epiteto character varying(200)

, nombre_comun character varying, nativa integer, prioritaria integer, amenazada integer, snap integer, criterios text, fecha_estado_cons text

, uicn_mundial character varying(10), uicn_regional character varying(10), cites character varying(10), cms character varying(10), ponsoñozo integer, vector integer

, planta_leñosa integer, planta_herbacea integer, exotica_invasoralista_dinama integer,

35

Page 36: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

exotica_asilvestrada integer, caza_deportiva_comercial_con_permiso integer

, caza_sin_permiso integer, exotica integer, presenciasgm TEXT, codigo_carta_sgm_50000 TEXT, presenciappr TEXT, ecosistema_ppr text, desc_localizacion TEXT) AS $$

BEGIN

RETURN QUERY

SELECT distinct e.id, gr.nombre AS grupo

, o.nombre orden, f.nombre familia, g.nombre genero, e.epiteto epiteto,

CASE WHEN

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

= '' THEN ''

ELSE

(SELECT distinct nc.nombre FROM biodiversidad_nombrecomun nc

WHERE nc.id IN

(SELECT enc.nombrecomun_id FROM biodiversidad_especie_nombres_comunes enc

WHERE enc.especie_id = e.id) limit 1

)

END

AS nombre_comun

,

CASE WHEN

(SELECT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.exotica = true) OR (be2.id in

(SELECT ea.especie_id

36

Page 37: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

FROM biodiversidad_especie_atributos ea

INNER JOIN biodiversidad_atributo a ON (ea.atributo_id = a.id) AND (a.id = 4 AND a.id = 6)

limit 1)

)) = 1 THEN 0

ELSE

1

END nativa

,

CASE WHEN

e.prioritaria = true THEN 1

ELSE

0

END prioritaria

,

CASE WHEN

e.amenazada = true THEN 1

ELSE

0

END amenazada

,

CASE WHEN

(SELECT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT ee.especie_id

FROM biodiversidad_estatusespecie ee

INNER JOIN biodiversidad_estatusespecie_criterios ee_c ON ee_c.estatusespecie_id = ee.id

INNER JOIN biodiversidad_criterio c ON ee_c.criteriodegrupo_id = c.id

order by fecha desc limit 1)

37

Page 38: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

)) >= 1 THEN 1

ELSE

0

END snap

,

(SELECT DISTINCT string_agg(COALESCE(c2.codigo), ',') FROM biodiversidad_criterio c2

WHERE c2.id IN

(SELECT ee_c2.criteriodegrupo_id

FROM biodiversidad_estatusespecie_criterios ee_c2

WHERE ee_c2.estatusespecie_id IN

(SELECT DISTINCT ee2.especie_id

FROM biodiversidad_estatusespecie ee2

WHERE ee2.especie_id = e.id

)

))AS criterios

, -- ee.fecha AS fecha_estado_cons

(SELECT DISTINCT to_char(max(ee.fecha), 'MM-DD-YYYY')

FROM biodiversidad_estatusespecie ee

WHERE ee.especie_id = e.id) AS fecha_estado_cons

, (SELECT DISTINCT u1.codigo FROM biodiversidad_uicn u1 WHERE u1.id = e.uicn_mundial_id) AS uicn_mundial

, (SELECT DISTINCT u2.codigo FROM biodiversidad_uicn u2 WHERE u2.id = e.uicn_regional_id) AS uicn_regional

, (SELECT DISTINCT cites.codigo FROM biodiversidad_cites cites WHERE cites.id = e.cites_id) AS cites

, (SELECT DISTINCT cms.codigo FROM biodiversidad_cms cms WHERE cms.id = e.cms_id) AS cms

,

38

Page 39: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

CASE WHEN

(SELECT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 1

limit 1)

)) = 1 THEN 1

ELSE

0

END ponsoñozo

,

CASE WHEN

(SELECT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 5

limit 1)

)) = 1 THEN 1

ELSE

0

END vector

,

CASE WHEN

(SELECT count(be2.*)

39

Page 40: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 7

limit 1)

)) = 1 THEN 1

ELSE

0

END planta_leñosa

,

CASE WHEN

(SELECT DISTINCT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 8

limit 1)

)) = 1 THEN 1

ELSE

0

END planta_herbacea

,

CASE WHEN

(SELECT DISTINCT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

40

Page 41: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

(SELECT DISTINCT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 4

limit 1)

)) = 1 THEN 1

ELSE

0

END exotica_invasora_lista_dinama

,

CASE WHEN

(SELECT DISTINCT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT DISTINCT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 6

limit 1)

)) = 1 THEN 1

ELSE

0

END exotica_asilvestrada

,

CASE WHEN

(SELECT DISTINCT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT DISTINCT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

41

Page 42: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 3

limit 1)

)) = 1 THEN 1

ELSE

0

END caza_deportiva_comercial_con_permiso

,

CASE WHEN

(SELECT DISTINCT count(be2.*)

FROM biodiversidad_especie be2

WHERE (be2.id = e.id) AND (be2.id IN

(SELECT DISTINCT ea2.especie_id

FROM biodiversidad_especie_atributos ea2

INNER JOIN biodiversidad_atributo a2 ON a2.id = ea2.atributo_id AND a2.id = 2

limit 1)

)) = 1 THEN 1

ELSE

0

END caza_sin_permiso

,

CASE WHEN

e.exotica = true THEN 1

ELSE

0

END exotica

, (SELECT DISTINCT string_agg(CAST(esgm.presencia AS TEXT), ',') FROM biodiversidad_especieengrillasgm esgm

WHERE e.id = esgm.especie_id) presenciasgm

42

Page 43: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

, (SELECT DISTINCT string_agg(gsgm.codigo, ',') FROM biodiversidad_grillasgm gsgm

WHERE gsgm.id IN (SELECT DISTINCT esgm.grilla_sgm_id FROM biodiversidad_especieengrillasgm esgm

WHERE e.id = esgm.especie_id)) codigo_carta_sgm_50000

,(SELECT DISTINCT string_agg(CAST(eeppr.presencia AS TEXT), ',') FROM biodiversidad_especieenecosistemappr eeppr

WHERE e.id = eeppr.especie_id) presenciappr

, (SELECT DISTINCT string_agg(eppr.codigo, ',') FROM biodiversidad_ecosistemappr eppr

WHERE eppr.id IN (SELECT DISTINCT eeppr.ecosistema_ppr_id FROM biodiversidad_especieenecosistemappr eeppr

WHERE e.id = eeppr.especie_id)) ecosistema_ppr

,(SELECT DISTINCT string_agg(uap.nam_loc, ',') FROM datos_ubicacion_ap uap

WHERE uap.site_id IN

(SELECT DISTINCT eap.area_protegida_id FROM biodiversidad_especieenareaprotegida eap

WHERE eap.especie_id = e.id)) desc_localizacion

FROM biodiversidad_especie e

-- grupo

INNER JOIN biodiversidad_genero g ON g.id = e.genero_id

INNER JOIN biodiversidad_familia f ON f.id = g.familia_id

INNER JOIN biodiversidad_orden o ON o.id = f.orden_id

INNER JOIN biodiversidad_grupo gr ON gr.id = o.grupo_id

LEFT JOIN biodiversidad_estatusespecie ee ON ee.especie_id = e.id

ORDER BY 1, 2, 3, 4, 5;

43

Page 44: Consultas a base de datos de SISNAP - MVOTMA€¦ · Ver. Registro 1.0.0 – 22-04-2015 Introducción Este documento contiene requerimientos de consultas a la base de datos de SISNAP

Ver. Registro 1.0.0 – 22-04-2015

END;

$$ LANGUAGE plpgsql;

44