wiki:Franchissabilite piscicole

back to first page ..
back to CookBook Eda
back to Obstacle pressure
back to CookBook join ROE_CCM

Table franchissabilite

Build a view allowing to know the score of the different dams

in #46

-- 1/ CONTRAINTE, ne marche pas -- Il ne peut y avoir qu'une seule note pour un barrage et par espèce sinon

ALTER TABLE geobs2010.franchissabilite_piscicole add constraint uk_franchissabilite_piscicole UNIQUE(fra_ref_id,fra_esp_id);

-- 2/ recherche des valeurs dupliquées

SELECT * FROM (

    SELECT count(*) as nombre, fra_esp_id, fra_ref_id
    from geobs2010.franchissabilite_piscicole
    where fra_note is not null
    group by fra_ref_id,fra_esp_id) as sub
    where nombre>1; -- 62 doublons (dont un avec 4 données identiques)

-- 3/Nombre de valeurs distinctes

SELECT count(*) from (
SELECT DISTINCT ON (fra_esp_id,fra_ref_id)*
from geobs.franchissabilite_piscicole

    where fra_note is not null) as sub; -- 23461

-- 4/ nombre de valeurs totales

select count (*) from geobs2010.franchissabilite_piscicole -- 26510

-- 5/ Requête pour selectionner les identifiants des valeurs dupliquées

SELECT * from geobs.franchissabilite_piscicole where fra_id not in(

    SELECT fra_id from (
    SELECT DISTINCT ON (fra_esp_id,fra_ref_id)*
    from geobs2010.franchissabilite_piscicole) as distinctes)

ORDER BY fra_ref_id; -- 493 lines

-- 6/ Requète pour sélectionner toutes les valeurs dupliquées --320 values

select * from geobs.franchissabilite_piscicole where fra_ref_id in(

    SELECT fra_ref_id from geobs2010.franchissabilite_piscicole where fra_id not in(

        SELECT fra_id from (
        SELECT DISTINCT ON (fra_esp_id,fra_ref_id)*
        from geobs2010.franchissabilite_piscicole) as distinctes)

)
ORDER BY fra_ref_id, fra_esp_id;
-- 7/ je crée une table contenant barrages avec plus que une seule note pour la même espèce
drop table if exists duplicated;
create temporary table duplicated as(
select *from geobs2010.franchissabilite_piscicole where fra_ref_id in(

    SELECT fra_ref_id from geobs2010.franchissabilite_piscicole where fra_id not in(

        SELECT fra_id from (
        SELECT DISTINCT ON (fra_esp_id,fra_ref_id)*
        from geobs2010.franchissabilite_piscicole) as distinctes)

)
ORDER BY fra_ref_id, fra_esp_id);
-- 8/ Liste de tous les dupliqués avec la même note pour la même espèce
drop table if exists identiques;
create temporary table identiques as(
select * from duplicated where (fra_ref_id, fra_esp_id,fra_note) IN

    (SELECT fra_ref_id, fra_esp_id,fra_note FROM duplicated
    group by fra_ref_id, fra_esp_id,fra_note
    HAVING COUNT(*) > 1) )-- 86

-- 9/ Je veux n'en garder qu'un donc avoir la liste des autres à virer pour sûr, je choisis un -- id au hasard avec distinct on et je vais demander de virer les autres

select * from identiques where fra_id not in(
select distinct on (fra_ref_id,fra_esp_id,fra_note) fra_id
from identiques) -- 58 lines to delete, 55 lines to keep
Last modified 13 years ago Last modified on Oct 3, 2012 4:45:22 PM