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

Sign in to follow this  
Knitter

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

Recommended Posts

Knitter

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.

Share this post


Link to post
Share on other sites
TheDark

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.


Desaparecido.

Share this post


Link to post
Share on other sites
Knitter

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.

Share this post


Link to post
Share on other sites
TheDark

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?


Desaparecido.

Share this post


Link to post
Share on other sites
Knitter

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.

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.