Buscar

mysql Como somar valores de um campo agrupado por data Stack Overflow em Português

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Faça como milhares de estudantes: teste grátis o Passei Direto

Esse e outros conteúdos desbloqueados

16 milhões de materiais de várias disciplinas

Impressão de materiais

Agora você pode testar o

Passei Direto grátis

Você também pode ser Premium ajudando estudantes

Prévia do material em texto

23/04/2018 mysql - Como somar valores de um campo agrupado por data? - Stack Overflow em Português
https://pt.stackoverflow.com/questions/12444/como-somar-valores-de-um-campo-agrupado-por-data 1/2
Como somar valores de um campo agrupado por data? Faça uma pergunta
SELECT funcionario_id, data, avaliacao_postura FROM equipe 
id funcionario_id data avaliacao_postura 
1 1 2014-03-02 -25;-10;-5;-12 
2 1 2014-03-01 -25;-10;-18 
3 1 2014-03-02 -25;-15;-14 
Preciso fazer um select que me retorne a soma do campo fazendo a soma em todas as data iguais e em negativo e o resultado
agrupado por data. O resultado teria que ser como neste exemplo:
avaliacao_postura
funcionario_id data avaliacao_postura 
1 2014-03-02 -106 
1 2014-03-01 -53
 mysql sql-select
editada 9/04/14 às 23:31
AndersonBS
2.721 2 17 43
perguntada 9/04/14 às 22:43
Neoelectronics
46 1 1 5
 – Seria bem simples, não fosse a necessidade de somar na horizontal os valores dentro de , que é texto e não numérico.avaliacao_postura bfavaretto ♦ 9/04/14 às 22:48
2 Respostas
Eu mudaria o design dessa tabela. Da maneira que dados estão armazenados agora você não
consegue trazer nenhuma informação básica referente as avaliações.
Um exemplo de uma nova estrutura:
 date smallint NOT NULL 
id funcionario_id data avaliacao_postura 
1 1 2014-03-02 -25 
2 1 2014-03-02 -10 
3 1 2014-03-02 -5 
4 1 2014-03-02 -12 
5 1 2014-03-01 -25 
6 1 2014-03-01 -10 
7 1 2014-03-01 -18 
8 1 2014-03-02 -25 
9 1 2014-03-02 -15 
10 1 2014-03-02 -14
Dessa maneira você consegue o resultado esperado com uma simples query.
SELECT funcionario_id, data, SUM(avaliacao_postura) as avaliacao_postura 
FROM equipe 
GROUP BY funcionario_id, data
respondida 10/04/14 às 2:36
Erico
675 3 9
1 – Esse é o modelo que eu teria feito deste o inicio ... user6026 10/04/14 às 14:41
Crie uma View no mesmo banco dessa tabela com esse Script ( é só rodar esse trecho ):
Create View iterator (x) as 
select 1 union all 
select 2 union all 
select 3 union all 
select 4 union all 
select 5 union all 
select 6;
Logo Após rode essa SQL:
SELECT funcionario_id, data, sum(avaliacao_postura) avaliacao_postura from 
( 
select 
 substring_index( 
 substring_index(equipe.avaliacao_postura,';',iter.x), ';', -1) 
 AS avaliacao_postura, equipe.data, equipe.funcionario_id 
 
23/04/2018 mysql - Como somar valores de um campo agrupado por data? - Stack Overflow em Português
https://pt.stackoverflow.com/questions/12444/como-somar-valores-de-um-campo-agrupado-por-data 2/2
from equipe, iterator iter 
 where iter.x <= length(equipe.avaliacao_postura)-length( 
 replace(equipe.avaliacao_postura,';',''))+1 order by equipe.data, iter.x) AS C 
GROUP BY data 
ORDER BY data
É uma forma razoável e que funcionou...
Se eu fosse você mudaria o layout da sua tabela para compor a cada linha um item do
avaliacao_postura, mas, esse rotina vai estraindo item a item dentro da string separada por e
relaciona com os itens da View iterator.
;
editada 4/05/14 às 23:48 respondida 10/04/14 às 0:17
user6026
1
 – 
Você pode incluir uma explicação? Sua solução funciona, ao menos para esse caso, mas o funcionamento do
método que você usou não é óbvio. bfavaretto ♦ 10/04/14 às 14:20
 – 
@bfavaretto, essa solução foi a base de pesquisa, e realmente ela funciona, eu não faria assim eu faria um linha
para cada dado de avaliacao_postura, ou seja, mudaria o layout da tabela ... user6026 10/04/14 às 14:38
1
 –
 
Entendo (eu também usaria outro layout), mas como você achou um jeito que nem requer chamada de função
MySQL, seria legal para a comunidade que esse método fosse explicado em detalhes. É sempre recomendado
incluir explicações nas respostas, e levar em consideração que sua resposta não é somente para quem fez a
pergunta, e sim um conteúdo que pode vir a ajudar muitos outros futuros visitantes do site. Eu pessoalmente
considero a explicação até mais importante que o código que resolve o problema, por ser mais genérica.
bfavaretto ♦ 10/04/14 às 14:40
2 – Aproveitando, segue um demo da sua solução: sqlfiddle.com/#!2/a97d6/1 bfavaretto ♦ 10/04/14 às 14:43
 – muito obrigado resolveu o meu problema, pensei que seria mais simples mais ja vi que nao. Neoelectronics
13/06/14 às 2:21

Continue navegando