Ir para conteúdo
Fórum Script Brasil
  • 0

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


Guest Ricardo Nepomuceno

Pergunta

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

Link para o comentário
Compartilhar em outros sites

8 respostass a esta questão

Posts Recomendados

  • 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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.

Link para o comentário
Compartilhar em outros 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

Link para o comentário
Compartilhar em outros 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>

Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,5k
×
×
  • Criar Novo...