Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Eduardo Barros_90473

[Resolvido] Somar registros da coluna SQL

Recommended Posts

Tenho o seguinte código,

 

 

$sql = "SELECT node, MAX(log) As IdLog FROM node WHERE Month(ini_q) = '$mes' AND year(ini_q) ='2011' GROUP BY node order by node ASC";
$res = mysql_query($sql) or die (mysql_error());

while($row=mysql_fetch_array($res)){
$node 		= $row["node"];
$IdLog 		= $row["IdLog"];

}

 

O que me retorna as seguintes linhas:

 

JANEIRO

Node Reincidência D- 30

ABO1A

ABO1A1 1

ABO1A2

ABO1B

ABO1B1

ABO1B2

ABO1C

ABO1C1 1

ABO1C2 1

ABO3C1

B2A

B2B

B4A 3

B4C 1

BOQ3B

BOQ3C

BOQ6B

C3C 1

 

 

Como faço para somar os numeros da segunda coluna em um só total?...nesse caso o total seria "8"

 

Acho que o exemplo ficou meio confuso...

 

Ex:

 

10

15

10

8

5

 

total= 48

Compartilhar este post


Link para o post
Compartilhar em outros sites

um pequeno exemplo

$sql = "SELECT SUM(pontos) FROM lista_pontos";
$result = mysql_query($sql) or die (mysql_error());
while ($l=mysql_fetch_array($result)) {
echo $l['SUM(pontos)'];
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Até ai eu chego beleza, mas acontece que preciso pegar o maior valor de cada registro e fazer o sum....

 

 

$sql = "SELECT node, MAX(log) As IdLog FROM node WHERE Month(ini_q) = '$mes' AND year(ini_q) ='2011' GROUP BY node order by node ASC";

 

 

$sql = "SELECT SUM(log) FROM node WHERE Month(ini_q) = '$mes' AND year(ini_q) ='2011'";
$result = mysql_query($sql) or die (mysql_error());
while ($l=mysql_fetch_array($result)) {
echo $l['SUM(log)'];
};

 

com esse código acima ele esta pegando todos os valores e não os mais altos de cada registro, o que deveria dar 31 esta dando 43...

 

conseguem me entender?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Certo .. assim ?

mysql> create table points ( point integer not null , mes char ( 2 ) ) ;
Query OK, 0 rows affected (0.04 sec)

mysql> insert into points values ( 5 , 1 ) , ( 13 , 1 ) , ( 126 , 6 ) , ( 12 , 2 ) ;
Query OK, 4 rows affected (0.01 sec)
Records: 4  Duplicates: 0  Warnings: 0

mysql> select sum( point ) from points where mes = 1 group by mes having max(point);
+--------------+
| sum( point ) |
+--------------+
|           18 |
+--------------+
1 row in set (0.01 sec)

mysql>

 

Se você quer a soma de cada mês, vai ter que remover o critério.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Quase, eu tenho o resgistro repetido com logs diferentes, por isso agrupei exibindo o mais alto.

 

Ex:

 

casa 5 mes 1

casa 52 mes 1

casa 7 mes 1

casa 8 mes 1

casa 1 mes 1

 

Agrupei usando o max para exibir o "52". mas na hora de soma ele soma todos , como fazer para ele somar somente os mais altos, estou fazendo uma confusão aqui ja, obrigado pela ajuda e paciência.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não estou entendendo .. somar é uma coisa, seja de maior pra menor ou de menor pra maior, sempre vai dar o mesmo resultado .. por isso não existe 'somar os maiores', exatamente porque você não vai conseguir distinguir quem é maior e menor em UMA tabela com X registros, você tem UM único maior .. e um único menor, então .. você vai somar o que ? todos os maiores .. só se fosse com outras tabelas, por exemplo, um JOIN com o maior da tabela X , Y , Z ....

 

:natallaugh:

 

Agora, se você quer somar todos, é uma unica coisa .. vai ter um ÚNICO resultado, então você vai agrupar o que ?

mysql> select * from numbers;
+--------+
| number |
+--------+
|      1 |
|      5 |
|     10 |
|    200 |
|    123 |
|     12 |
|     56 |
+--------+
7 rows in set (0.03 sec)

mysql> select sum(number) from numbers;
+-------------+
| sum(number) |
+-------------+
|         407 |
+-------------+
1 row in set (0.00 sec)

mysql> select sum(number) from numbers group by number;
+-------------+
| sum(number) |
+-------------+
|           1 |
|           5 |
|          10 |
|          12 |
|          56 |
|         123 |
|         200 |
+-------------+
7 rows in set (0.00 sec)

 

Amigão, você não está falando coisa com coisa .. não está dando pra compreender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

cara ta complicado mesmo de entender... mas pelo que imagino o que você quer fazer talvez se você usar uma sub-query você consiga, tipo assim:

 

tabela teste
-> id
-> node
-> valor

dados da tabela:

id    node    valor
1     casa    1
2     casa    30
3     casa    99
4     teste   5
5     teste   10
6     teste   40

 

sql:

select t1.node,(select max(valor) from teste t2 where t1.node=t2.node group by node) as maior from teste t1 group by node

 

o resultado será esse:

 

teste 40

casa 99

 

você na sua programação na hora de puxar os dados

 

$soma = 0;
while($row=mysql_fetch_array($res)){
 // aqui você ira somar
 $soma += $row['maior'];
}

 

pelo menos isso que eu entendi...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo nielson, exatamente isso que estava querendo explicar , me desculpem se compliquei, agora uso o outro código para somar o teste 40 e o casa 99?!?!?!......as é exatamente o que eu preciso!!

 

Isso mesmo! a variavel $soma vai somar os valores maximos obtidos da consulta SQL

Compartilhar este post


Link para o post
Compartilhar em outros sites

Perfeito Nielson, TÓPICO RESOLVIDO, muitíssimo obrigado pela ajuda a você e a todos que postaram aqui.

 

segue resolução:

 

$sql = "SELECT node, MAX(log) As IdLog FROM node WHERE Month(ini_q) = '$mes' AND year(ini_q) ='2011' GROUP BY node order by node ASC";
$res = mysql_query($sql) or die (mysql_error());
$soma=0;
while($row=mysql_fetch_array($res)){
$node = $row["node"];
$IdLog = $row["IdLog"];

$soma += $row['IdLog'];

} 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Humm .. agora deu pra entender, você queria os valores mais altos de cada mês só que agrupando pela node, como se eu tivesse:

 

[tr]

[td]Ano: 2011[/td]

[td]Node: 1[/td]

[td]200[/td]

[/tr]

 

[tr]

[td]Ano: 2011[/td]

[td]Node: 1[/td]

[td]192[/td]

[/tr]

[tr]

[td]Ano: 2011[/td]

[td]Node: 3[/td]

[td]123[/td]

[/tr]

[tr]

[td]Ano: 2011[/td]

[td]Node: 1[/td]

[td]201[/td]

[/tr]

 

Nesse caso iria somar ( 201 + 123 )

Compartilhar este post


Link para o post
Compartilhar em outros sites

Isso mesmo, eu não soube explicar direito o que estava querendo, na verdade eu só queria somar os valores que eu ja tinha.

 

Alguém pode me dar um help com esse outro tópico...

 

 

http://forum.imasters.com.br/topic/453458-link-em-abas/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.