I'm having difficulty joining two tables and using some aggregate function, I've tried it like this:
SELECT nome FROM produto
INNER JOIN vendaproduto SUM(quantidade)
ON produto.idproduto = vendaproduto.idproduto
But it is giving error ...
I'm having difficulty joining two tables and using some aggregate function, I've tried it like this:
SELECT nome FROM produto
INNER JOIN vendaproduto SUM(quantidade)
ON produto.idproduto = vendaproduto.idproduto
But it is giving error ...
Translating the Produto
and venda_Produto
tables from your template to PgSQL
:
CREATE TABLE Produto
(
idproduto INTEGER NOT NULL,
nome VARCHAR(60) NOT NULL,
PRIMARY KEY ( idproduto )
);
CREATE TABLE venda_Produto
(
idvenda INTEGER NOT NULL,
idproduto INTEGER NOT NULL,
quantidade INTEGER NOT NULL,
PRIMARY KEY ( idvenda, idproduto ),
FOREIGN KEY (idproduto) REFERENCES Produto (idproduto)
);
Registering Products:
INSERT INTO Produto ( idproduto, nome ) VALUES ( 100, 'Prego' );
INSERT INTO Produto ( idproduto, nome ) VALUES ( 200, 'Parafuso' );
INSERT INTO Produto ( idproduto, nome ) VALUES ( 300, 'Chave de Fenda' );
Registering Sales:
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 1, 100, 1 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 2, 100, 4 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 3, 100, 1 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 4, 200, 3 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 5, 200, 1 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 6, 200, 3 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 7, 300, 5 );
INSERT INTO venda_Produto ( idvenda, idproduto, quantidade ) VALUES ( 8, 300, 5 );
To determine which best-selling product you have, you can combine the SUM()
aggregation function with the ORDER BY
and LIMIT
clauses, see:
SELECT
idproduto,
sum(quantidade) AS qtd_total
FROM
venda_Produto
GROUP BY
idproduto
ORDER BY
qtd_total DESC
LIMIT
1;
Output:
| idproduto | qtd_total |
|-----------|-----------|
| 300 | 10 |
Now, including JOIN
with the Produtos
table:
SELECT
vp.idproduto,
p.nome,
sum(vp.quantidade) AS qtd_total
FROM
venda_Produto AS vp
JOIN
Produto AS p ON ( p.idproduto = vp.idproduto )
GROUP BY
vp.idproduto,
p.nome
ORDER BY
qtd_total DESC
LIMIT
1;
Output:
| idproduto | nome | qtd_total |
|-----------|----------------|-----------|
| 300 | Chave de Fenda | 10 |