Upload
others
View
1
Download
0
Embed Size (px)
Citation preview
Consultas a 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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Ver. Registro 1.0.0 – 22-04-2015
END;
$$ LANGUAGE plpgsql;
44