count(*) en un group

08/11/2007 - 19:28 por rubenc | Informe spam
Hola
alguien pudiera decirme como obtener el numero total de registro de un selec
como este:

SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING count(*) > 0
and year(f1) = 2005 and month(f1)
order by c1

esta sentencia me agrupa los registros repetidos...

de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
(porque se repite el campo c1 y la fecha)

si le digo select count(*) me da el total que agrupo por cada registro...
yo quiero que me diga el numero total de registros... en este ejemplo seria
538

tendria que leer registro por registro incrementando un contador hasta
llegar al fin del select... y eso es tardado

Muchas Gracias

Ruben Carreon

Preguntas similare

Leer las respuestas

#1 Carlos M. Calvelo
08/11/2007 - 20:02 | Informe spam
Hola Ruben,

On 8 nov, 19:28, rubenc wrote:
Hola
alguien pudiera decirme como obtener el numero total de registro de un selec
como este:

SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING count(*) > 0



Si quieres solo los repetidos tienes que usar
HAVING count(*) > 1.
El HAVING count(*) > 0 no hace nada.


and year(f1) = 2005 and month(f1)
order by c1

esta sentencia me agrupa los registros repetidos...

de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
(porque se repite el campo c1 y la fecha)

si le digo select count(*) me da el total que agrupo por cada registro...
yo quiero que me diga el numero total de registros... en este ejemplo seria
538

tendria que leer registro por registro incrementando un contador hasta
llegar al fin del select... y eso es tardado




select count(*)
from ( <pon aquí tu select completo> ) A

Saludos,
Carlos
Respuesta Responder a este mensaje
#2 rubenc
08/11/2007 - 20:49 | Informe spam
Gracias por tu respuesta Carlos

no es ese el problema... con HAVING count(*) > 0 m regresa agrupados aunque
no esten repetidos, ejemplo

c1 count(*)
110 200
120 1
130 10
140 100
150 1

si le pongo HAVING count(*) > 1 me da:
c1 count(*)
110 200
130 10
140 100

pero ese no es el problema, el problema es que quiero saber cuantos
registros en total me da este select -group
en el ejemplo uno me dria 5 registros, en el dos me diria 3 registros...
eso es lo que no puedo logar que me de...

saludos


Muchas Gracias

Ruben Carreon


"Carlos M. Calvelo" wrote:

Hola Ruben,

On 8 nov, 19:28, rubenc wrote:
> Hola
> alguien pudiera decirme como obtener el numero total de registro de un selec
> como este:
>
> SELECT c1, year(f1), month(f1)
> FROM tabla
> GROUP BY c1, year(f1), month(f1)
> HAVING count(*) > 0

Si quieres solo los repetidos tienes que usar
HAVING count(*) > 1.
El HAVING count(*) > 0 no hace nada.


> and year(f1) = 2005 and month(f1)
> order by c1
>
> esta sentencia me agrupa los registros repetidos...
>
> de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
> (porque se repite el campo c1 y la fecha)
>
> si le digo select count(*) me da el total que agrupo por cada registro...
> yo quiero que me diga el numero total de registros... en este ejemplo seria
> 538
>
> tendria que leer registro por registro incrementando un contador hasta
> llegar al fin del select... y eso es tardado
>

select count(*)
from ( <pon aqum tu select completo> ) A

Saludos,
Carlos


Respuesta Responder a este mensaje
#3 Alejandro Mesa
08/11/2007 - 20:53 | Informe spam
rubenc,

Si estas usando SQL Server 2005, tambien puedes usar una funcion de
agrupacion en conjunto con la nueva clausula OVER.

use northwind
go

SELECT
customerid,
year(orderdate) AS y,
month(orderdate) AS m,
COUNT(*) OVER() AS row_cnt
FROM
dbo.Orders
GROUP BY
customerid,
year(orderdate),
month(orderdate)
HAVING
count(*) > 0
and year(orderdate) = 1997 and month(orderdate)=8
order BY
customerid
GO


AMB


"rubenc" wrote:

Hola
alguien pudiera decirme como obtener el numero total de registro de un selec
como este:

SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING count(*) > 0
and year(f1) = 2005 and month(f1)
order by c1

esta sentencia me agrupa los registros repetidos...

de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
(porque se repite el campo c1 y la fecha)

si le digo select count(*) me da el total que agrupo por cada registro...
yo quiero que me diga el numero total de registros... en este ejemplo seria
538

tendria que leer registro por registro incrementando un contador hasta
llegar al fin del select... y eso es tardado

Muchas Gracias

Ruben Carreon
Respuesta Responder a este mensaje
#4 Carlos M. Calvelo
08/11/2007 - 20:57 | Informe spam
On 8 nov, 20:49, rubenc wrote:
Gracias por tu respuesta Carlos

no es ese el problema... con HAVING count(*) > 0 m regresa agrupados aunque
no esten repetidos, ejemplo

c1 count(*)
110 200
120 1
130 10
140 100
150 1

si le pongo HAVING count(*) > 1 me da:
c1 count(*)
110 200
130 10
140 100

pero ese no es el problema,



Pues no pongas el HAVING COUNT(*) > 0
Con el GROUP BY ... ya basta.


el problema es que quiero saber cuantos
registros en total me da este select -group
en el ejemplo uno me dria 5 registros, en el dos me diria 3 registros...
eso es lo que no puedo logar que me de...




Ya te lo he dicho :)

Aquí está:

> select count(*)
> from ( <pon aqui tu select completo> ) A




Saludos,
Carlos
Respuesta Responder a este mensaje
#5 rubenc
09/11/2007 - 02:29 | Informe spam
Gracias Carlos y Alejandro por contestar...

Carlos, si le quito el el HAVING COUNT(*) > 0
no me agrupa los duplicados y necesito que me agrupe los duplicados

Alejandro uso SQL 2000 y 2005, asi que si la causula OVEr solo funciona en
el 2k5 no me sirve...

Muchas Gracias

Ruben Carreon


"Alejandro Mesa" wrote:

rubenc,

Si estas usando SQL Server 2005, tambien puedes usar una funcion de
agrupacion en conjunto con la nueva clausula OVER.

use northwind
go

SELECT
customerid,
year(orderdate) AS y,
month(orderdate) AS m,
COUNT(*) OVER() AS row_cnt
FROM
dbo.Orders
GROUP BY
customerid,
year(orderdate),
month(orderdate)
HAVING
count(*) > 0
and year(orderdate) = 1997 and month(orderdate)=8
order BY
customerid
GO


AMB


"rubenc" wrote:

> Hola
> alguien pudiera decirme como obtener el numero total de registro de un selec
> como este:
>
> SELECT c1, year(f1), month(f1)
> FROM tabla
> GROUP BY c1, year(f1), month(f1)
> HAVING count(*) > 0
> and year(f1) = 2005 and month(f1)
> order by c1
>
> esta sentencia me agrupa los registros repetidos...
>
> de hecho en la tabla tengo como 5000 registros y me lo agrupa como en 538
> (porque se repite el campo c1 y la fecha)
>
> si le digo select count(*) me da el total que agrupo por cada registro...
> yo quiero que me diga el numero total de registros... en este ejemplo seria
> 538
>
> tendria que leer registro por registro incrementando un contador hasta
> llegar al fin del select... y eso es tardado
>
> Muchas Gracias
>
> Ruben Carreon
Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaSiguiente Respuesta Tengo una respuesta
Search Busqueda sugerida