none
Usando o count e sum ao mesmo tempo RRS feed

  • Pergunta

  • Boa tarde!

     

     

    Gostaria de saber se posso usar o comando sum junto com o comando count. Preciso fazer uma soma para gerar um percentual.Tenho a seguinte consulta:

     

     

    SELECT TOP (6) COUNT(*) AS Total, campo1

    FROM tabela1 INNER JOIN

    tabela2 ON tabela1.campo1 = tabela2.campo1 INNER JOIN

    tabela3 ON tabela2.campo2 = tabela3.campo2

    WHERE (tabela2.campo4 = 'MG')

    ORDER BY Total DESC

     

     

    segunda-feira, 6 de agosto de 2007 15:20

Respostas

  • Ramon,

     

    Então neste caso, você poderia armazenar o valor do Count em uma variável e depois utilizar esta variável com o SUM, veja o exemplo abaixo:

     

    Code Snippet

    Create Table #Teste

     (Codigo Int Identity(1,1),

       Descricao VarChar(10))

     

    Insert Into #Teste Values('Arroz')

    Insert Into #Teste Values('Feijão')

    Insert Into #Teste Values('Milho')

    Insert Into #Teste Values('Sal')

     

    Select * From #Teste

     

    Declare @Contador Int

     

    Set @Contador=(Select Count(*) From #Teste)

     

    Select Sum(Codigo)+@contador As "Soma Acumulada" from #Teste

     

     

     

     

     

    terça-feira, 7 de agosto de 2007 11:18

Todas as Respostas

  • Ramon,

     

    Pode usar sim.

     

    Mas se você usar o Sum ou Count sem o Group By o seu Top não irá funcionar. Pois tanto o SUM quanto o COUNT retornam apenas uma linha.

     

    Veja Exemplo:

     

    select (sum(valor)/coun(*)*100) as percentual from tabela1 t1 

    join tabela2 t2 on t1.campo1 = t2.campo1

    join tabela3 t3 on t2.campo2 = t3.campo2

    where (t2.campo4 = 'MG')

     

     

    Agora você pode tirar o percentual por grupo é só usar o Group By,.

     

    []'s

     

    Rafael Krisller

    segunda-feira, 6 de agosto de 2007 15:43
  • Ramon,

     

    Pode usar sim.

     

    Mas se você usar o Sum ou Count sem o Group By o seu Top não irá funcionar. Pois tanto o SUM quanto o COUNT retornam apenas uma linha.

     

    Veja Exemplo:

     

    select (sum(valor)/coun(*)*100) as percentual from tabela1 t1 

    join tabela2 t2 on t1.campo1 = t2.campo1

    join tabela3 t3 on t2.campo2 = t3.campo2

    where (t2.campo4 = 'MG')

     

     

    Agora você pode tirar o percentual por grupo é só usar o Group By,.

     

    []'s

     

    Rafael Krisller

    segunda-feira, 6 de agosto de 2007 15:43
  • Ramon,

     

    Pode usar sim.

     

    Mas se você usar o Sum ou Count sem o Group By o seu Top não irá funcionar. Pois tanto o SUM quanto o COUNT retornam apenas uma linha.

     

    Veja Exemplo:

     

    select (sum(valor)/coun(*)*100) as percentual from tabela1 t1 

    join tabela2 t2 on t1.campo1 = t2.campo1

    join tabela3 t3 on t2.campo2 = t3.campo2

    where (t2.campo4 = 'MG')

     

     

    Agora você pode tirar o percentual por grupo é só usar o Group By,.

     

    []'s

     

    Rafael Krisller

    segunda-feira, 6 de agosto de 2007 15:43
  •  

    Rafael,

     

    Em primeiro lugar obrigado pela dica. O que acontece é que preciso somar o valor encontrado no count. Você citou sum(valor)/count(*)*100 mas para saber o valor eu preciso primeiro do total do count. Se estiver errado, por favor me

    corrija.

     

    []s

    Ramon

    terça-feira, 7 de agosto de 2007 10:22
  • Ramon,

     

    Então neste caso, você poderia armazenar o valor do Count em uma variável e depois utilizar esta variável com o SUM, veja o exemplo abaixo:

     

    Code Snippet

    Create Table #Teste

     (Codigo Int Identity(1,1),

       Descricao VarChar(10))

     

    Insert Into #Teste Values('Arroz')

    Insert Into #Teste Values('Feijão')

    Insert Into #Teste Values('Milho')

    Insert Into #Teste Values('Sal')

     

    Select * From #Teste

     

    Declare @Contador Int

     

    Set @Contador=(Select Count(*) From #Teste)

     

    Select Sum(Codigo)+@contador As "Soma Acumulada" from #Teste

     

     

     

     

     

    terça-feira, 7 de agosto de 2007 11:18