How to add the numbers of a column in the bank that has the same id and repeats?

Asked

Viewed 1,083 times

3

Eu troquei os nomes das variáveis para não dar plágio no meu trabalho

I have a table called venda_itens that has venda_id, item_id and item_quantidade.

I wanted to bring back the item name with the total amount of items sold, and to amount of total items, through a inner join with the table item which possesses: the nome and the quantidade_total.

SELECT *FROM itens_venda inner join itens on itens.itens_id=itens.itens_id 

But I don’t know how to add the sold amount of items in the table venda_itens. How to do?

  • 2

    You are aware that this modeling is not normalized, right?

  • 1

    I think this explanation may be good to understand about normal forms: https://answall.com/a/103894/64969

  • I didn’t understand the new modeling. It’s like for an example with some tuples?

  • I updated with print...

  • produto and item are the same thing ? Tables venda_itens, itens_venda and produto_venda are the same thing ?

1 answer

4


Assuming your model and your data are something like:

CREATE TABLE produto_venda
(
    venda_id INTEGER,
    prod_id INTEGER,
    prod_unidade INTEGER
);

CREATE TABLE produto
(
    prod_id INTEGER,
    prod_nome TEXT,
    prod_valor_compra NUMERIC,
    prod_valor_venda NUMERIC,
    prod_unidades INTEGER,
    forn_id INTEGER
);

-- CADASTRO DOS PRODUTOS
INSERT INTO produto ( prod_id, prod_nome, prod_valor_compra, prod_valor_venda, prod_unidades, forn_id )
VALUES ( 10, 'Panela de Barro', 20.95, 40.25, 22, 15 );
INSERT INTO produto ( prod_id, prod_nome, prod_valor_compra, prod_valor_venda, prod_unidades, forn_id )
VALUES ( 20, 'Colher de Pau', 2.50, 4.20, 100, 15 );
INSERT INTO produto ( prod_id, prod_nome, prod_valor_compra, prod_valor_venda, prod_unidades, forn_id )
VALUES ( 30, 'Chaleira', 30.00, 50.50, 13, 15 );


-- VENDAS DE PANELAS DE BARRO
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 100, 10, 1 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 101, 10, 2 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 102, 10, 1 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 103, 10, 1 );

-- VENDAS DE COLHERES DE PAU
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 104, 20, 4 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 105, 20, 4 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 106, 20, 2 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 107, 20, 1 );

-- VENDAS DE CHALEIRAS
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 108, 30, 1 );
INSERT INTO produto_venda ( venda_id, prod_id, prod_unidade ) VALUES ( 109, 30, 1 );

You can use the aggregation function sum() combined with the clause GROUP BY:

SELECT
    pv.prod_id AS id,
    p.prod_nome AS nome,
    p.prod_valor_venda AS valor,
    sum(pv.prod_unidade) AS qts_vendidos,
    sum(p.prod_valor_venda * pv.prod_unidade) AS total_vendido
FROM
    produto_venda AS pv
JOIN
    produto AS p ON ( p.prod_id = pv.prod_id )
GROUP BY
    pv.prod_id,
    p.prod_nome,
    p.prod_valor_venda
ORDER BY
    p.prod_nome;

Exit:

| id |            nome | valor | qts_vendidos | total_vendido |
|----|-----------------|-------|--------------|---------------|
| 30 |        Chaleira |  50.5 |            2 |           101 |
| 20 |   Colher de Pau |   4.2 |           11 |          46.2 |
| 10 | Panela de Barro | 40.25 |            5 |        201.25 |

See working on Sqlfiddle

  • 1

    @Victorprvt: Edit your question by putting more details about the structure of your tables and about the data contained in them, this helps a lot. I’ll change my answer as soon as you do.

  • OK, I’ll do it! obg

  • Updated.....

  • 2

    @Victorprvt: Ready! Ah! , And next time, try to elaborate a more detailed question with more information and avoid editing it to the point of mischaracterizing the original question. Everyone Thanks!

  • Sorry, dude... it’s because I’m learning.. More now I’m going yes! Thank you, you saved my life! Thanks a lot!

  • @Victorprvt: All of us are apprentices around here, after all, learning is one of Sopt’s greatest "balconies". ;o)

Show 1 more comment

Browser other questions tagged

You are not signed in. Login or sign up in order to post.