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

3

I have a table named venda_itens which has venda_id , item_id and item_quantidade .

I'd like to bring back the item name with the total number of items sold, and the quantity of total items inner join with the item table that has: nome and quantidade_total .

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

But I do not know how to add the quantity of items sold in the venda_itens table. How to do?

    
asked by anonymous 01.11.2017 / 00:00

1 answer

4

Assuming your model and data is 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 sum() aggregation function combined with the GROUP BY clause:

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;

Output:

| 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 in SQLFiddle

    
01.11.2017 / 00:02