I'm having trouble doing this query using BETWEEN
this is the template
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: Query the total amount 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: Query the total amount of Produtos
sold in year 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: link