|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Member
Iscritto dal: Oct 2008
Messaggi: 38
|
interrogazioni in postgresql
salve a tutti,
ho seri problemi ad effettuare 2 query sul mio db in postgres dovrei: 1- effettuare un elenco che indichi la percentuale di auto vendute da un'azienda per modello rispetto alle auto prodotte nellultimo anno 2- effettuare la media delle auto vendute da un rivenditore al mese relativa alle vendite dellultimo anno le mie tabelle sono così: Codice:
CREATE TABLE motorizzazione.auto ( id_reg integer NOT NULL DEFAULT nextval('motorizzazione.auto_id_reg'::regclass), "NserAuto" integer NOT NULL, modello character varying(128) NOT NULL, data_prod date NOT NULL, costo integer NOT NULL, data_reg date, data_distr date, distrutta boolean DEFAULT false, nome_mod character varying(256) NOT NULL, CONSTRAINT auto_pkey PRIMARY KEY (id_reg), CONSTRAINT auto_nome_mod_fkey FOREIGN KEY (nome_mod) REFERENCES motorizzazione.modello (nome_modello) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE NO ACTION, CONSTRAINT auto_check CHECK (data_reg >= data_prod), CONSTRAINT auto_data_prod_check CHECK (data_prod <= 'now'::text::date) Codice:
CREATE TABLE motorizzazione.modello ( nome_modello character varying(256) NOT NULL, cc integer NOT NULL, potenza_kw integer NOT NULL, consumo integer NOT NULL, nome_prod character varying(256) NOT NULL, tel_prod character varying(256) NOT NULL, residenza_prod character varying(256) NOT NULL, cod_prod integer NOT NULL, CONSTRAINT modello_pkey PRIMARY KEY (nome_modello), CONSTRAINT modello_nome_prod_fkey FOREIGN KEY (nome_prod, tel_prod, residenza_prod, cod_prod) REFERENCES motorizzazione.produttore (nome_propr, tel_propr, residenza_propr, cod_propr) MATCH SIMPLE Codice:
CREATE TABLE motorizzazione.passaggio ( id_trasf integer NOT NULL, data_trasf date NOT NULL, auto_trasf integer, cod_propr integer NOT NULL, nome_propr character varying(256) NOT NULL, residenza_propr character varying(256) NOT NULL, tel_propr character varying NOT NULL, id_reg integer NOT NULL, CONSTRAINT passaggio_pkey PRIMARY KEY (id_trasf), CONSTRAINT passaggio_cod_propr_fkey FOREIGN KEY (cod_propr, residenza_propr, tel_propr, nome_propr) REFERENCES motorizzazione.proprietario (cod, residenza, tel, nome) Codice:
CREATE TABLE motorizzazione.produttore ( nome_propr character varying(256) NOT NULL, tel_propr character varying(256) NOT NULL, residenza_propr character varying(256) NOT NULL, numero_verde integer, am_delegato character varying(128) NOT NULL, attivo boolean, cod_propr integer NOT NULL, CONSTRAINT produttore_pkey PRIMARY KEY (cod_propr, nome_propr, tel_propr, residenza_propr), CONSTRAINT produttore_nome_propr_fkey FOREIGN KEY (nome_propr, tel_propr, residenza_propr, cod_propr) REFERENCES motorizzazione.proprietario (nome, tel, residenza, cod) Codice:
CREATE TABLE motorizzazione.rivenditore ( nome character varying(256) NOT NULL, tel character varying(256) NOT NULL, residenza character varying(256) NOT NULL, cod integer NOT NULL, attivo boolean NOT NULL, autorizzato boolean NOT NULL, fax character varying(256), CONSTRAINT rivenditore_pkey PRIMARY KEY (nome, tel, residenza, cod), CONSTRAINT rivenditore_nome_fkey FOREIGN KEY (nome, tel, residenza, cod) REFERENCES motorizzazione.proprietario (nome, tel, residenza, cod) la prima ho pensato di farla come funzione ma non penso sia giusta...help! Codice:
create OR REPLACE function percento(prod character varying) returns float as 'declare numeratore integer; denominatore integer; percentuale float; begin select into numeratore count(*) from "motorizzazione".passaggio, "motorizzazione".produttore where passaggio.cod_propr = produttore.cod_propr AND produttore.nome_propr = prod; select into denominatore count(*) from "motorizzazione".modello, "motorizzazione".produttore where modello.cod_prod = produttore.cod_propr AND produttore.nome_propr = prod; percentuale = numeratore/denominatore *100; return percentuale; end;' language 'plpgsql'; Codice:
select rivenditore.nome,count(passaggio.id_reg)/12 from "motorizzazione".rivenditore natural join "motorizzazione".passaggio where EXTRACT(year FROM passaggio.data_trasf) IN (SELECT EXTRACT(year FROM CURRENT_DATE)) and passaggio.cod_propr=rivenditore.cod group by rivenditore.nome; Ultima modifica di lultimo : 11-01-2010 alle 12:07. Motivo: aggiornamento |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Oct 2008
Messaggi: 38
|
pleeeaseeee
![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:04.