Check how many Products were sold in the year 2017

0

I'm having trouble doing this query using BETWEEN this is the template

    
asked by anonymous 16.05.2018 / 04:22

1 answer

1

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

    
16.05.2018 / 14:31