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

#6 Carlos M. Calvelo
09/11/2007 - 13:31 | Informe spam
Hola Ruben,

On 9 nov, 02:29, rubenc wrote:
Mostrar la cita
Que terco eres chico! Pero mejor así.
A los tercos nadie nos convence de tonterías asi por la buenas. :-)

El GROUP BY agrupa, el HAVING selecciona grupos. Seleccionar todos
los grupos con COUNT(*) > 0 no tiene sentido porque todos los
grupos son el resultado de de agrupar por lo menos un registro.
Todos tienen un COUNT(*) mayor que 0.

Y si no lo crees pruebas lo siguiente con tu ejemplo:

SELECT c1, year(f1), month(f1),
count(*) as 'No_de_registros_en_este_grupo'
FROM tabla
GROUP BY c1, year(f1), month(f1)

Cuantas lineas en el resultado tienen un count(*)
menor que 1?

En cuanto a el número de registros en el resultado de tu
consulta... repito por tercera vez:

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

Que con tu select viene a ser algo como:

SELECT COUNT(*) AS 'Numero de registros en el resultato del select'
FROM
(
SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING year(f1) = 2005 and month(f1)
) A

He quidado el COUNT(*) > 0 del HAVING por las razones
ya expuestas.
Y he quitado el ORDER BY que para solo contar los
registros no aporta nada.

Si quieres el resultado original con una columna extra contando los
registros:

SELECT
A.c1, A.YR, A.MO, COUNT(*) as 'Contador'
FROM
(
SELECT c1, year(f1) as 'YR', month(f1) as 'MO'
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING year(f1) = 2005 and month(f1)
) A
INNER JOIN
(
SELECT c1, year(f1), month(f1)
FROM tabla
GROUP BY c1, year(f1), month(f1)
HAVING year(f1) = 2005 and month(f1)
) B
ON A.c1 >= B.c1
GROUP BY
A.c1, A.YR, A.MO
ORDER BY A.c1

Para hacer el JOIN ... ON A.c1 >= B.c1 estoy asumiendo que los
valores de la columna c1 no se repiten en las subconsultas A y B.

No he probado los selects. Espero que no den errores.

Yo también soy muy terco! :-)

Saludos,
Carlos
#7 Carlos M. Calvelo
09/11/2007 - 14:26 | Informe spam
On 9 nov, 13:31, "Carlos M. Calvelo" wrote:
Mostrar la cita
A no ser que uses outer joins claro!!
Pero tu ejemplo solo usa una tabla en el FROM.

Saludos,
Carlos
#8 Carlos M. Calvelo
09/11/2007 - 14:37 | Informe spam
On 9 nov, 14:26, "Carlos M. Calvelo" wrote:
Mostrar la cita
Bueno... he probado un LEFT JOIN con registros en
la tabla de la izquierda que no tienen registros en
la tabla de la derecha y también dan un COUNT(*)
de por lo menos 1.

Saludos,
Carlos
#9 rubenc
09/11/2007 - 18:53 | Informe spam
Hola Carlos...

Oye gracias por lo de terco... jajaja

pero parece que estamos hablando de otra cosa cada quien

el group y el having lo entiendo, entiendo lo que me dices...
pero ese no es mi problema...

aparentemente con COUNT(*) > 0 no tiene sentido pero para lo que hago, es lo
que necesito... que me agrupe toda la tabla aunque la mayoria no esten
repetidos... eso quiero y me funciona...

gracias por los dema ejemplos, muy utiles, me van a servir de algo...
pero ese no es el problema

el problema es... encontrar la forma de obtener el numero de registros total
del cursor que obtengo de hacer el select... group by... having...

ahorita lo que hago, los cuento manualmente con un contador... numreg++;
pero bueno tal vez si lo mando a otra tabla... con INTO tabla_temp
y a esa tabla le doy un select count(*) obviamente me va a decir el numero
total de registros, pero queria evitar rodeos...

gracias por tus respuestas y tu ayuda...

Saludos desde Culiacán, México


Muchas Gracias

Ruben Carreon


"Carlos M. Calvelo" wrote:

Mostrar la cita
#10 Carlos M. Calvelo
09/11/2007 - 20:17 | Informe spam
Ruben,

On 9 nov, 18:53, rubenc wrote:
Mostrar la cita
De nada. Ya somos dos. :-)

Mostrar la cita
Eso parece.

Mostrar la cita
Pues saludos para ti también desde Rotterdam, Holanda
Carlos
Ads by Google
Search Busqueda sugerida