none
SELECT COUNT com vários dados RRS feed

  • Pergunta

  • Eu preciso fazer um select para mostrar as estatísticas do site...

    Ex.: Veiculos cadastrados: 3.015

    Imóveis cadastrados: 1.560

    Diversos cadastros: 2.123

    Total de cadastros: 6.698

    Total de denuncias: 2

    Eu tenho a tabela anuncio onde tem as informaçoes do anuncio.

    Eu poderia fazer um select para cada item dessa maneira:

    SELECT COUNT(idanuncio) as veiculos FROM anuncio WHERE secao = 1

    A única coisa que eu tenho que mudar na query é o valor da secao, onde veiculos é 1, imoveis é 2, diversos é 3, teria que somar todos ou simplesmente fazer a query sem o WHERE e o total de denuncias que é um campo na tabela onde é true ou false.

    Eu queria saber se tem como fazer isso em uma query só, ou tenho que montar uma query para cada item que eu quero contar.

    Estou usando SQL Server 2008 com Procedures, asp.net e c#, mas eu queria fazer isso somente na Procedure

    Obrigado :D 



    quinta-feira, 12 de maio de 2011 20:25

Respostas

  • Murilo,

     

    A melhor maneira acho que seria um pivot table, todo caso, creio que a query abaixo atenda o que voce precisa:

     

    --CRIA TABELA

    Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))

    --CARGA DE DADOS

    Insert Into @Anuncios Values

    (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),

    (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),

    (3, 'Diversos'), (3, 'Diversos')

    --SELECT

    select

    distinct

    (select count(*) from @Anuncios where IdAnuncio = 1) as Veiculos,

    (select count(*) from @Anuncios where IdAnuncio = 2) as Imoveis,

    (select count(*) from @Anuncios where IdAnuncio = 3) as Diversos

    from @Anuncios a

    group by a.DsAnuncio


    Oracle OCA11g, MCC 2011!
    • Marcado como Resposta Murilo Bom sexta-feira, 13 de maio de 2011 13:23
    sexta-feira, 13 de maio de 2011 11:55
    Moderador

Todas as Respostas

  • Murilo,

     

     

    Veja este exemplo:

    SELECT Descrição, COUNT(idanuncio) as Qtde

    FROM anuncio

    group by descrição

     

     

    Lembrando que o campo descrição no seu caso é a coluna que possui vaiculo, imovel, diversos....etc...

     


    Oracle OCA11g, MCC 2011!
    quinta-feira, 12 de maio de 2011 20:33
    Moderador
  • Segue um exemplo da sua situação. Além do select do Fabrizzio, acrescentei a linha referente ao total.

    /* Declara a tabela e cadastra 5 veículos, 7 imóveis e 2 Diversos */

    Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))

    Insert Into @Anuncios Values

    (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),

    (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),

    (3, 'Diversos'), (3, 'Diversos')

     

    Select

      Anúncio = '-> ' + DsAnuncio + ' cadastrados: ' + Convert(VarChar(20), Count(IdAnuncio))

    From

      @Anuncios

    Group by

      DsAnuncio

    Union

    Select

      Anúncio = 'Total cadastrados: ' + Convert(VarChar(20), Count(IdAnuncio))

    From

      @Anuncios


    Roberson Ferreira


    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    quinta-feira, 12 de maio de 2011 21:58
  • Pessoal,

     

    Existem tambem a possibilidade de se utilizar rollup e cube.


    Oracle OCA11g, MCC 2011!
    sexta-feira, 13 de maio de 2011 01:57
    Moderador
  • é que na verdade que queria retornar os valores desta forma:

    ________________________________

    carros | imoveis | diversos | total |

     200   |   304    |    403     | 907  |

    Eu tentei usar o UNION, mas só retornou a primeira coluna
    Vou colocar como fiz o sql:

    select COUNT(idanuncio) as carros from classificados_anuncio where secao = 1 
    union
    select COUNT(idanuncio) as imoveis from classificados_anuncio where secao = 2 
    union
    select COUNT(idanuncio) as diversos from classificados_anuncio where secao = 3 
    union
    select COUNT(idanuncio) as total from classificados_anuncio
    
     Mas isso nao der certo, pois só retornou o primeiro select...

    sexta-feira, 13 de maio de 2011 11:48
  • Murilo,

     

    A melhor maneira acho que seria um pivot table, todo caso, creio que a query abaixo atenda o que voce precisa:

     

    --CRIA TABELA

    Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))

    --CARGA DE DADOS

    Insert Into @Anuncios Values

    (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),

    (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),

    (3, 'Diversos'), (3, 'Diversos')

    --SELECT

    select

    distinct

    (select count(*) from @Anuncios where IdAnuncio = 1) as Veiculos,

    (select count(*) from @Anuncios where IdAnuncio = 2) as Imoveis,

    (select count(*) from @Anuncios where IdAnuncio = 3) as Diversos

    from @Anuncios a

    group by a.DsAnuncio


    Oracle OCA11g, MCC 2011!
    • Marcado como Resposta Murilo Bom sexta-feira, 13 de maio de 2011 13:23
    sexta-feira, 13 de maio de 2011 11:55
    Moderador
  • Murilo, como a dúvida já foi respondida, não sei nem se verá esta informação, rs.

    Mas só para constar, com o PIVOT vocÊ resolveria da seguinte forma:

    /* Declara a tabela e cadastra 5 veículos, 7 imóveis e 2 Diversos */

    Declare @Anuncios Table (IdAnuncio int, DsAnuncio VarChar(50))

    Insert Into @Anuncios Values

    (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'), (1, 'Veiculos'),

    (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'), (2, 'Imóveis'),

    (3, 'Diversos'), (3, 'Diversos')

     

    Select [1] as Veículos, [2] as Imóveis, [3] as Diversos

    From @Anuncios Pivot (Count(DsAnuncio) For IdAnuncio in ([1],[2],[3])) P


    Roberson Ferreira


    Se esta sugestão for útil, por favor, classifique-a como útil.
    Se ela lhe ajudar a resolver o problema, por favor, marque-a como Resposta.

    sexta-feira, 13 de maio de 2011 15:52