0
Translating your data model to PL/PgSQL
:
CREATE TABLE Cliente (
idcliente BIGINT NOT NULL PRIMARY KEY,
nome VARCHAR(60) NOT NULL,
salario NUMERIC(10,2) NOT NULL,
dataNascimento DATE NOT NULL,
sexo VARCHAR(1) NOT NULL
);
CREATE TABLE Venda (
idvenda BIGINT NOT NULL PRIMARY KEY,
dataVenda DATE NOT NULL,
valorTotal NUMERIC(10,2) NOT NULL,
idCliente BIGINT NOT NULL,
FOREIGN KEY (idvenda) REFERENCES Cliente(idcliente)
);
CREATE TABLE Produto (
idproduto BIGINT NOT NULL PRIMARY KEY,
nome VARCHAR(60) NOT NULL,
dataValidade DATE,
descricao VARCHAR(100) NOT NULL,
marca VARCHAR(50) NOT NULL,
valor NUMERIC(10,2) NOT NULL
);
CREATE TABLE VendaProduto (
idvenda BIGINT NOT NULL,
idproduto BIGINT NOT NULL,
quantidade NUMERIC(10,2) NOT NULL,
valotTotalProd NUMERIC(10,2) NOT NULL,
PRIMARY KEY (idvenda, idproduto ),
FOREIGN KEY (idvenda) REFERENCES Venda(idvenda),
FOREIGN KEY (idproduto) REFERENCES Produto(idproduto)
);
Solution #1: Consult the total quantity of Produtos
sold between 01/01/2017
and 31/12/2017
:
SELECT
sum(vp.quantidade)
FROM
VendaProduto AS vp
JOIN
Venda AS v ON ( v.idvenda = vp.idproduto )
WHERE
v.dataVenda BETWEEN '2017-01-01' AND '2017-12-31';
Solution #2: Consult the total quantity of Produtos
sold in the year of 2017
:
SELECT
sum(vp.quantidade)
FROM
VendaProduto AS vp
JOIN
Venda AS v ON ( v.idvenda = vp.idproduto )
WHERE
EXTRACT( YEAR FROM v.dataVenda ) = 2017;
Sqlfiddle: http://sqlfiddle.com/#! 15/662a8/19