• Revista PROGRAMAR: Já está disponível a edição #53 da revista programar. Faz já o download aqui!

Knitter

[RESOLVIDO]Como somar os elementos obtidos de uma consulta por cada linha?

5 mensagens neste tópico

Boas,

Preciso de umas dicas de como somar os valores obtidos na seguinte consulta:

SELECT u.id AS uId, idc_number, name, cs.`year`, cs.`month`, cs.hours AS mHours, 
    ROUND(cs.hours * cs.granthourvalue,2) AS grantvalue, cs.days AS  mDays, cs.days * 1 as grantmeal, cs.grantdisplacement AS mDisplacement,
    cs.granthousing AS mHousing, cs.grantreception AS mReception, cs.granthourvalue, cs.grantmealvalue
FROM `sl_training_class` AS cl
    INNER JOIN `sl_training_class_enroll` AS ce ON cl.id = ce.class AND ce.status > 0
    INNER JOIN `sl_users` AS u ON ce.enrolle = u.id
    LEFT JOIN `sl_training_class_scholarship` cs ON cs.trainee = u.id AND date(CONCAT(cs.`year`, '-', cs.`month`, '-1')) < date($baseDate)
    WHERE cl.entity = $entity AND cl.`id`= $class 
ORDER BY NAME;

Pretendia obter a soma de, por exemplo, os valores mReception ou mHours, para cada registo onde o u.id é igual.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

SELECT u.id as uId, name, SUM(cs.hours) AS mHours, SUM(cs.grantReception) AS mReception
FROM ... ... ...
ORDER BY name
GROUP BY uId, name

Qualquer outra coluna que queiras adicionar ao SELECT tens que adicionar igualmente ao GROUP BY.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Ou não percebi bem o que indicaste ou não percebeste o que quero.

Dando um exemplo de output, a consulta devolve, para cada mês, um conjunto de valores.

7, '10791769', 'Ana S', 2008, 12, 19, 0.00, 0, 0, 0, 0, 0, 0, 0

7, '10791769', 'Ana S', 2009, 1, 2, 137.02, 2, 2, 0, 0, 0, 68.51, 4.11

8, '110511671', 'Ana L', 2009, 1, 5, 342.55, 5, 5, 0, 0, 0, 68.51, 4.11

8, '110511671', 'Ana L', 2008, 12, 19, 0.00, 0, 0, 0, 0, 0, 0, 0

Neste exemplo dá para ver que cada utilizador tem um conjunto de valores diferente, eu pretendia somar estes resultados e ter a soma para cada utilizador, assim o utilizador com o ID 7 iria ter uma soma de 19 horas com 2 horas de dois meses, resultando num valor de 21 horas. Do mesmo modo o utilizador 8 iria ficar com 24 horas de total, resultante da soma de 19 com 5.

O que não estou a conseguir fazer é mesmo esta soma. Só consigo somar todos os valores num só resultado, em vez de somar para cada utilizador.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Supostamente o código que apresentei daria um resultado do género:

uId  name      mHours   mReception

7    'Ana S'   21       68.51

8    'Ana L'   24       68.51

Não era o que pretendias?

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Sim, era o que queria :D e já está a funcionar.

(...)

Qualquer outra coluna que queiras adicionar ao SELECT tens que adicionar igualmente ao GROUP BY.

Entendi mal esta frase, dado que não queria adicionar nada ao SELECT que não estivesse já lá :confused:, e como colocaste dados a mais no GROUP BY, percebi de outra forma.

Obrigado, acho que está a funcionar como é esperado.

0

Partilhar esta mensagem


Link para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!


Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.


Entrar Agora