Somar valores linha
Bom dia, tenho uma tabela que em cada linha tem um vendedor, os vendedores tem nomes únicos. Depois tenho as colunas com as vendas de janeiro, fevereiro e março. Em seguida uma coluna com a meta de vendas. Por fim uma coluna que tenho que preencher com sim caso bateu a meta e não caso não bateu. O problema é que quando uso SUM para somar, ele soma a coluna janeiro toda, em vez de somar janeiro, fevereiro e março de cada um. Conseguem me ajudar por favor.
Eliton Silva
Curtidas 0
Melhor post
Arthur Heinrich
17/04/2023
A coluna Vendedor foi definida como TEXT. Porém, é mais adequado que seja do tipo VARCHAR(<tamanho máximo>).
O tipo TEXT serve para armazenar textos grandes, geralmente de até 2 GB e, portanto, não é indexável e não vai aceitar a constraint de PK ou Unique, que garantiria a unicidade do vendedor.
Neste caso, trata-se de um modelo hipotético para exercitar o aprendizado, onde após inserir os dados de vários vendedores, você precisa atualizar as colunas TotalTri e AtingiuMeta.
A característica de "vendedores únicos" aqui, estou interpretando como sendo uma constraint que impede que múltiplas linhas sejam inseridas para o mesmo vendedor, o que poderia implicar uma inconsistência com valores distintos entre eles. Então, se não há múltiplas linhas por vendedor, não há necessidade de uso de funções de agregação.
Basta um update, mais ou menos assim:
O tipo TEXT serve para armazenar textos grandes, geralmente de até 2 GB e, portanto, não é indexável e não vai aceitar a constraint de PK ou Unique, que garantiria a unicidade do vendedor.
Neste caso, trata-se de um modelo hipotético para exercitar o aprendizado, onde após inserir os dados de vários vendedores, você precisa atualizar as colunas TotalTri e AtingiuMeta.
A característica de "vendedores únicos" aqui, estou interpretando como sendo uma constraint que impede que múltiplas linhas sejam inseridas para o mesmo vendedor, o que poderia implicar uma inconsistência com valores distintos entre eles. Então, se não há múltiplas linhas por vendedor, não há necessidade de uso de funções de agregação.
Basta um update, mais ou menos assim:
update `Super7`.`Vendas` set `TotalTri` = `Jan`+`Fev`+`Mar`, `AtingiuMeta` = case when (`Jan`+`Fev`+`Mar`)>=`Meta` then 'sim' else 'não' end;
GOSTEI 1
Mais Respostas
Frank Hosaka
16/04/2023
O primeiro problema é ver a cara da tabela, eu suponho que seja assim:
tbvenda
id
idvendedor
data
venda
Para ver a venda de cada mês, de cada vendedor, a consulta seria assim:
select sum(venda),idvendedor,month(data) from tbvenda where data>'2022-12-31' group by idvendedor
Para ver a venda de cada vendedor no ano de 2023, a consulta seria assim:
select sum(venda),idvendedor from tbvenda where data>'2022-12-31' group by idvendedor
Para ver tudo isso de uma vez, aí seria necessário um view, assim:
tbvenda
id
idvendedor
data
venda
Para ver a venda de cada mês, de cada vendedor, a consulta seria assim:
select sum(venda),idvendedor,month(data) from tbvenda where data>'2022-12-31' group by idvendedor
Para ver a venda de cada vendedor no ano de 2023, a consulta seria assim:
select sum(venda),idvendedor from tbvenda where data>'2022-12-31' group by idvendedor
Para ver tudo isso de uma vez, aí seria necessário um view, assim:
CREATE VIEW vw_venda AS SELECT id_vendedor, SUM(IF((MONTH(data) = 1),venda,0)) as jan, SUM(IF((MONTH(data) = 2),venda,0)) as fev, SUM(IF((MONTH(data) = 3),venda,0)) as mar, SUM(IF((MONTH(data) = 4),venda,0)) as abr, SUM(IF((MONTH(data) = 5),venda,0)) as mai, SUM(IF((MONTH(data) = 6),venda,0)) as jun, SUM(IF((MONTH(data) = 7),venda,0)) as jul, SUM(IF((MONTH(data) = 8),venda,0)) as ago, SUM(IF((MONTH(data) = 9),venda,0)) as "set", SUM(IF((MONTH(data) = 10),venda,0)) as "out", SUM(IF((MONTH(data) = 11),venda,0)) as nov, SUM(IF((MONTH(data) = 12),venda,0)) as dez, SUM(venda) AS `2023` FROM vendas where data > '2022-12-31' GROUP BY id_vendedor
GOSTEI 0
Eliton Silva
16/04/2023
Oi bom dia,
Desculpe não ter colocado a tabela, segue abaixo.
Eu preciso somar os valores que Jose vendeu e colocar em "TotralTri", depois comparar com a "Meta" e colocar sim ou não em "AtingiuMeta".
Obrigado pela ajuda.
Desculpe não ter colocado a tabela, segue abaixo.
CREATE TABLE `Super7`.`Vendas` ( `Vendedor` TEXT NOT NULL , `Jan` INT , `Fev` INT , `Mar` INT , `TotalTri` INT , `Meta` INT , `AtingiuMeta` TEXT ) ENGINE = InnoDB; INSERT INTO `Vendas` (`Vendedor`, `Jan`, `Fev`, `Mar`, `TotalTri`, `Meta`, `AtingiuMeta`) VALUES ('Jose', '1000', '100', '200', '0', '1000', ''), ('Pedro', '100', '100', '300', '0', '1000', '')
Eu preciso somar os valores que Jose vendeu e colocar em "TotralTri", depois comparar com a "Meta" e colocar sim ou não em "AtingiuMeta".
Obrigado pela ajuda.
O primeiro problema é ver a cara da tabela, eu suponho que seja assim:
tbvenda
id
idvendedor
data
venda
Para ver a venda de cada mês, de cada vendedor, a consulta seria assim:
select sum(venda),idvendedor,month(data) from tbvenda where data>'2022-12-31' group by idvendedor
Para ver a venda de cada vendedor no ano de 2023, a consulta seria assim:
select sum(venda),idvendedor from tbvenda where data>'2022-12-31' group by idvendedor
Para ver tudo isso de uma vez, aí seria necessário um view, assim:
tbvenda
id
idvendedor
data
venda
Para ver a venda de cada mês, de cada vendedor, a consulta seria assim:
select sum(venda),idvendedor,month(data) from tbvenda where data>'2022-12-31' group by idvendedor
Para ver a venda de cada vendedor no ano de 2023, a consulta seria assim:
select sum(venda),idvendedor from tbvenda where data>'2022-12-31' group by idvendedor
Para ver tudo isso de uma vez, aí seria necessário um view, assim:
CREATE VIEW vw_venda AS SELECT id_vendedor, SUM(IF((MONTH(data) = 1),venda,0)) as jan, SUM(IF((MONTH(data) = 2),venda,0)) as fev, SUM(IF((MONTH(data) = 3),venda,0)) as mar, SUM(IF((MONTH(data) = 4),venda,0)) as abr, SUM(IF((MONTH(data) = 5),venda,0)) as mai, SUM(IF((MONTH(data) = 6),venda,0)) as jun, SUM(IF((MONTH(data) = 7),venda,0)) as jul, SUM(IF((MONTH(data) = 8),venda,0)) as ago, SUM(IF((MONTH(data) = 9),venda,0)) as "set", SUM(IF((MONTH(data) = 10),venda,0)) as "out", SUM(IF((MONTH(data) = 11),venda,0)) as nov, SUM(IF((MONTH(data) = 12),venda,0)) as dez, SUM(venda) AS `2023` FROM vendas where data > '2022-12-31' GROUP BY id_vendedor
GOSTEI 0
Frank Hosaka
16/04/2023
O que você está tentando fazer é uma planilha dentro do banco de dados. Isso não funciona.
Cada tabela tem que representar uma informação do mundo real.
Maria vendeu 10,00 em janeiro de 2023.
João vendeu 20,00 em janeiro de 2023.
Pedro vendeu 12,00 em janeiro de 2023.
Para incluir essas informações, o comando é esse:
insert into vendas vendedor, data, venda values (''Maria'',''2023-01-31'',10.00),(''João'',''2023-01-31'',20.00),(''Pedro'',''2023-01-31'',12.00).
Aqui eu tenho um campo para vendedor, outro campo para data e outra para venda.
Para saber o que a Maria vendeu em 2023, você usa uma consulta assim:
select sum(venda) from venda where vendedor = ''Maria''
Para saber o que a Maria vendeu por mês em 2023, você usa outra consulta assim:
select month(data), sum(venda) from venda where vendedor=''Maria''
Para saber o que os vendedores venderam por mês em 2023, você usa outra consulta assim:
select month(data),sum(venda) from venda group by vendedor.
Ou seja, você precisa separar a tabela (a fonte da informação) da consulta (como você apresenta a informação).
Cada tabela tem que representar uma informação do mundo real.
Maria vendeu 10,00 em janeiro de 2023.
João vendeu 20,00 em janeiro de 2023.
Pedro vendeu 12,00 em janeiro de 2023.
Para incluir essas informações, o comando é esse:
insert into vendas vendedor, data, venda values (''Maria'',''2023-01-31'',10.00),(''João'',''2023-01-31'',20.00),(''Pedro'',''2023-01-31'',12.00).
Aqui eu tenho um campo para vendedor, outro campo para data e outra para venda.
Para saber o que a Maria vendeu em 2023, você usa uma consulta assim:
select sum(venda) from venda where vendedor = ''Maria''
Para saber o que a Maria vendeu por mês em 2023, você usa outra consulta assim:
select month(data), sum(venda) from venda where vendedor=''Maria''
Para saber o que os vendedores venderam por mês em 2023, você usa outra consulta assim:
select month(data),sum(venda) from venda group by vendedor.
Ou seja, você precisa separar a tabela (a fonte da informação) da consulta (como você apresenta a informação).
GOSTEI 0