• 0
Sign in to follow this  
Guest Ricardo Nepomuceno

Montando Uma Instrução Select Usando A Função Sum

Question

Guest Ricardo Nepomuceno

Bom dia Galera,

É o seguinte , preciso trazer a soma total de um campo no banco de dados e tambem um outro código

Fiz a seguinte instrução sql

sql1 = "select sum(pontuacao),cod_user from tdpontos_bolao group by pontuacao"

set rs1 = conexao.execute(sql1)

mas esta dando o seguinte erro

************************************

Microsoft OLE DB Provider for SQL Server error '80040e14'

Column 'tdpontos_bolao.cod_user' is invalid in the select list because it is not contained in either an aggregate function or the GROUP BY clause.

/techdata/goleada/pontuacao.asp, line 42

************************************

Eu preciso pegar o cod_user porque estou fazendo um outro select onde pegarei os dados dos usuarios que mais pontuarão

então eu tenho a tabela com a pontuação

e a outra com os dados do usuario

quem puder ajudar eu agradeço

abraços

Ricardo

Share this post


Link to post
Share on other sites

8 answers to this question

Recommended Posts

  • 0

você deve agrupar por cod_user. Afinal, é o campo pontuacao q esta sendo somado. e você quer q ele seja somado para cada cod_user certo?

então fica assim:

select sum(pontuacao),cod_user from tdpontos_bolao group by cod_user

Share this post


Link to post
Share on other sites
  • 0
Guest Ricardo Nepomuceno

legal funcionou valeu , se eu fosse usar um inner join como eu faria ?

********************************************

sql = "SELECT * from top 30 tdpontos_bolao.cod_user, tdpontos_bolao.pontuacao, techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide ORDER BY tdpontos_bolao.pontuacao desc"

********************************************

Abraços

Ricardo

Share this post


Link to post
Share on other sites
  • 0

ve se é isso q c quer:

sql = "SELECT * from top 30 tdpontos_bolao.cod_user, Sum (tdpontos_bolao.pontuacao), techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide GROUP BY tdpontos_bolao.cod_user, techPromoInscritos.nome,techPromoInscritos.ide ORDER BY tdpontos_bolao.pontuacao desc" 

so não sei se funciona com o top 30.

Share this post


Link to post
Share on other sites
  • 0
Guest Ricardo Nepomuceno

É por ai

usando assim SELECT * from top 30 deu erro de sintaxe

ai eu modifiquei para abaixo

********************************************

sql = "SELECT top 30 * from tdpontos_bolao.cod_user, Sum (tdpontos_bolao.pontuacao), techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide GROUP BY tdpontos_bolao.cod_user, techPromoInscritos.nome,techPromoInscritos.ide where techPromoInscritos.rodada = '1' ORDER BY tdpontos_bolao.pontuacao desc"

set rs = conexao.execute(sql)

********************************************

ai deu este erro

Microsoft OLE DB Provider for SQL Server error '80040e14'

Line 1: Incorrect syntax near '.'.

/techdata/goleada/pontuacao.asp, line 53

Share this post


Link to post
Share on other sites
  • 0

acho q o certo seria:

SELECT top 30 tdpontos_bolao.cod_user, Sum (tdpontos_bolao.pontuacao), techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide where techPromoInscritos.rodada = '1'  GROUP BY tdpontos_bolao.cod_user, techPromoInscritos.nome,techPromoInscritos.ide ORDER BY Sum (tdpontos_bolao.pontuacao) desc

a sua query tinha os seguintes erros:

1 - "SELECT top 30 * from" estava errado. o certo é sempre por top 30 depois os nomes dos campos e depos o from (o * so aparece quando se quer selecionar todos os campos. nesse caso não se escreve o nome de nenhum campo).

se você ver vai ver q a sua query tinha dois froms

2 - tem ser sempre nessa ordem: Where, Group By, Order By. você não pode por o group antes do where.

3 - você não pode por order by num campo q esteja numa funcao de agrupamento (no caso o sum). se você deu sum na pontuacao, você não pode ordenar por ela a não ser q ordene por todo o campo agregado como fiz.

criei as tabelas com os mesmos nomes e campos, testei a minha string aqui e não teve problemas. qualquer coisa poste ae.

Share this post


Link to post
Share on other sites
  • 0

Valeu mano , a instrução sql funcionou , mas eu não entendo o porque ele não reconhecer o campo pontuação quando eu mando escrever ,

olha só

<%

rodada = "1"

sql = "SELECT top 30 tdpontos_bolao.cod_user, Sum (tdpontos_bolao.pontuacao), techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide where tdpontos_bolao.rodada = '"& rodada &"' GROUP BY tdpontos_bolao.cod_user, techPromoInscritos.nome,techPromoInscritos.ide ORDER BY Sum (tdpontos_bolao.pontuacao) desc"

set rs = conexao.execute(sql)

%>

</b></font></div>

</td>

</tr>

</table>

</div>

<table border="0" width="644" align="center" bgcolor="#eaeaea">

<tr>

<td width="45">&nbsp;</td>

<td height="10" width="507">

<div align="center"><font size="2" face="Verdana, Arial, sans-serif"><b>Nome</b></font></div>

</td>

<td height="10" width="78">

<div align="center"><b><font size="2" face="Verdana, Arial, sans-serif">Pontua&ccedil;&atilde;o</font></b></div>

</td>

</tr>

<% TotalRegistros = rs.recordcount %>

<%while not rs.eof%>

<% for i= 1 to TotalRegistros %>

<tr>

<td width="45" bgcolor="#FFFFFF"><div align="center" class="style4 style5"><%=i%>º</div></td>

<td height="26" width="507" bgcolor="#FFFFFF">

<div align="center" class="style4 style5"><%=rs("nome")%></div> </td>

<td height="26" width="78" bgcolor="#FFFFFF">

<div align="center" class="style4"><%=rs("pontuacao")%></div> </td>

<%

rs.movenext

next

wend

%>

ai ele da este erro

ADODB.Recordset error '800a0cc1'

Item cannot be found in the collection corresponding to the requested name or ordinal.

/techdata/goleada/pontuacao.asp, line 70

Share this post


Link to post
Share on other sites
  • 0

tente dar um alias para a soma. do tipo:

sql = "SELECT top 30 tdpontos_bolao.cod_user, Sum (tdpontos_bolao.pontuacao) as Soma, techPromoInscritos.nome,techPromoInscritos.ide FROM tdpontos_bolao INNER JOIN techPromoInscritos ON tdpontos_bolao.cod_user = techPromoInscritos.ide where tdpontos_bolao.rodada = '"& rodada &"' GROUP BY tdpontos_bolao.cod_user, techPromoInscritos.nome,techPromoInscritos.ide ORDER BY Sum (tdpontos_bolao.pontuacao) desc"

No lugar de Soma, você poe o nome q quiser.

ai na hora de mostrar você poe o nome do alias:

<div align="center" class="style4"><%=rs("Soma")%></div> </td>

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this