Re: [postgresql-it] trigger update e sum function

  • From: Stefano Romanelli <romanelli.stefano@xxxxxxxxx>
  • To: postgresql-it <postgresql-it@xxxxxxxxxxxxx>
  • Date: Mon, 30 Jun 2014 16:41:01 +0200

Ciao Enzo,

forse conviene abbandonare la crosstab (che non è una vera e propria pivot
- devi controllare che siano presenti tutti i valori altrimenti scala di un
posto), per cui forse sarebbe meglio usare una query tipo

WITH
can AS (
    SELECT
        sito,
        quadrato,
        min(specie),
        sum(tot) AS cane
    FROM
        fauna
    WHERE
        specie = 'cane'
    GROUP BY
        1,2
),
gat AS (
    SELECT
        sito,
        quadrato,
        min(specie),
        sum(tot) AS gatto
    FROM
        fauna
    WHERE
        specie = 'gatto'
    GROUP BY
        1,2
),
pec AS (
    SELECT
        sito,
        quadrato,
        min(specie),
        sum(tot) AS pecora
    FROM
        fauna
    WHERE
        specie = 'pecora'
    GROUP BY
        1,2
),
lup AS (
    SELECT
        sito,
        quadrato,
        min(specie),
        sum(tot) AS lupo
    FROM
        fauna
    WHERE
        specie = 'lupo'
    GROUP BY
        1,2
),
uni AS (
    SELECT
        sito,
        quadrato
    FROM
        fauna
    GROUP BY
        1,2
)
SELECT
    uni.sito,
    uni.quadrato,
    cane,
    gatto,
    pecora,
    lupo
FROM
    uni
LEFT JOIN
    can
USING
    (sito, quadrato)
LEFT JOIN
    gat
USING
    (sito, quadrato)
LEFT JOIN
    pec
USING
    (sito, quadrato)
LEFT JOIN
    lup
USING
    (sito, quadrato)
ORDER BY
    1,2
;

che ti ritorna quello che volevi.


Il giorno 30 giugno 2014 15:05, Enzo Cocca <enzo.ccc@xxxxxxxxx> ha scritto:

ciao stefano,

grazie di cuore per il cosiglio ed effettivamente hai ragione tu è un
problema di tab pivot ma che comunque posso poi trggerare

cmq sto vedendo la funzione crosstab ho scritto l'istruzione in questo
modo;

 select * from crosstab(
'select sum(count) as conteggio,specie,sito,quadrato
 from fauna
 group by sito,specie,quadrato'
)
as specie(sito character varying(10),
  quadrato character varying(10),
  bos integer,
  volpe integer,
  cane integer,
  cervo integer)

ma ho questo errore
ERRORE:  invalid source data SQL statement
DETTAGLI: The provided SQL must return 3 columns: rowid, category, and
values.

dove sbaglio?

scusami in anticipo se abuso del tuo tempo...

enzo

--
Enzo Cocca (PhD Candidate)
Research Fellow
Università di Napoli "L'Orientale"
mail: enzo.ccc@xxxxxxxxx
cell: +393495087014


_______________________________________________
Postgresql-it mailing list
Postgresql-it@xxxxxxxxxxxxx
http://lists.psql.it/mailman/listinfo/postgresql-it


Other related posts: