View Full Version : [pg sql] una domanda su una query e una su un trigger
ciao!
1)come si fa a fare delle percentuali?
per esempio ho una tabella con un 30 persone, con una colonna chiamata lavoro, e devo dire per ogni tipo di lavoro, la percentuale della gente che lo fà.
se 5/10 fanno "operaio", allora la query mi deve dare come risultato 50%.
ma il problema è che il /10 può aumentare o diminuire.
2)esiste da qualche parte una guida niubba che spieghi i trigger, fatti come funzioni e trigger. tipo:
CREATE OR REPLACE FUNCTION abc_FX() RETURNS trigger AS $abc_FX$
BEGIN
.........
END;
$abc_FX$ LANGUAGE plpgsql;
CREATE TRIGGER abc
AFTER INSERT OR UPDATE ON tabella
FOR EACH ROW EXECUTE PROCEDURE abc_FX()
grazie!!!
amedeoviscido
14-06-2008, 18:40
Per quanto riguarda la prima domanda, ho elaborato questa query.
Si presuppone che la tabella sia:
-----------
| Mansioni |
-----------
Nominativo
mansione
SELECT A.mansione as "Mansione", count(A.mansione) * 100.0 / totale as "percentuale" FROM mansioni A, (SELECT count(*) as "totale" FROM mansioni) as B GROUP BY A.mansione,B.totale
Ho provato ad inserire questi tre record:
Franco Rossi, Ing
Giuseppe Bianchi, Imp
Antonio Verdi, Imp
Con risultati
Ing | 33.333333
Imp | 66.666666
perfetto, ha funzionato.
ora sto provando a rendere la cosa più precisa.
dunque ammettiamo che ho una tabella così:
CREATE TABLE persone
(
cod_fiscale character varying(20) NOT NULL,
nome character varying(20) NOT NULL,
cognome character varying(30) NOT NULL,
data_n date NOT NULL,
tipo character(15),
CONSTRAINT persone_pkey PRIMARY KEY (cod_fiscale)
)
dove in tipo metto lavoratore, studente, niente.
se io dovessi restituire le percentuali di persone (lavoratore+studenti, non separati) suddivisi in fasce di età (21-25, 26-30, ecc.), ma solo se sono lavoratori o studenti (quindi come totale devo guardare anche i niente)?
cioè ho 3 lavoratori, 3 studenti, 3 niente.
sarebbe 66,6%. però devo anche dividere questo 66,6 in rapporto alle fasce di età
ah! quella di prima l'ho risolta così: now() - interval '31 years' < data_n AND now() - interval '26 years' e funziona!
amedeoviscido
15-06-2008, 10:43
complimenti, e grazie
Figurati
cod_fiscale character varying(20) NOT NULL,
Se posso suggerirti una cosa, il codice fiscale non è character varying, poiché è sempre di 16 caratteri.
se io dovessi restituire le percentuali di persone (lavoratore+studenti, non separati) suddivisi in fasce di età (21-25, 26-30, ecc.), ma solo se sono lavoratori o studenti (quindi come totale devo guardare anche i niente)?
Bella domanda.
Per restituire la percentuale di lavoratori+studenti, basta modificare la prima query che ti ho dato in questo modo:
SELECT A.non_niente * 100.0 / B.totale FROM (SELECT count(*) as "non_niente" FROM persone WHERE tipo<>'niente') as A, (SELECT count(*) as "totale" FROM persone) as B
Suddividere però per fasce d'età, difficilino... ho trovato una soluzione ma richiede una query per ogni fascia di età:
SELECT A.non_niente * 100.0 / B.totale FROM (SELECT count(*) as "non_niente" FROM persone WHERE tipo<>'niente' AND now() - interval '25 years' < data_n AND now() - interval '21 years' > data_n) as A, (SELECT count(*) as "totale" FROM persone) as B
Ovviamente per ogni query devi modificare la fascia d'età.
vBulletin® v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.