1
I’m having trouble joining two tables and using some aggregation function, I’ve tried it like this:
SELECT nome FROM produto
INNER JOIN vendaproduto SUM(quantidade)
ON produto.idproduto = vendaproduto.idproduto
only that it is giving error...
1
I’m having trouble joining two tables and using some aggregation function, I’ve tried it like this:
SELECT nome FROM produto
INNER JOIN vendaproduto SUM(quantidade)
ON produto.idproduto = vendaproduto.idproduto
only that it is giving error...
3
Translating the tables Produto
and venda_Produto
from its model 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 product was the most sold, you can combine the aggregation function SUM()
with the clauses ORDER BY
and LIMIT
, look at you:
SELECT
idproduto,
sum(quantidade) AS qtd_total
FROM
venda_Produto
GROUP BY
idproduto
ORDER BY
qtd_total DESC
LIMIT
1;
Exit:
| idproduto | qtd_total |
|-----------|-----------|
| 300 | 10 |
Now including the JOIN
with the table of Produtos
:
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;
Exit:
| idproduto | nome | qtd_total |
|-----------|----------------|-----------|
| 300 | Chave de Fenda | 10 |
Browser other questions tagged sql database postgresql
You are not signed in. Login or sign up in order to post.
It would be good if you put the error that is returning and if possible an example of how you need to output this data. In the code you posted failed to put the SUM in SELECT and add a GROUP BY:
SELECT nome, SUM(quantidade) FROM produto INNER JOIN vendaproduto ON produto.idproduto = vendaproduto.idproduto GROUP BY nome
. If it’s not that, send more details to make it easier for the community to help you :)– Camilo Santos