Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Contar número de filas repetidas

Estas en el tema de Contar número de filas repetidas en el foro de Mysql en Foros del Web. Saludos, tengo el sig. query en mysql: Código: select distinct cat_entmun.nom_ent,cat_entmun.entidad, cat_entmun.nom_mun, cat_entmun.municipio from cat_entmun inner join pond_mun where 1=1 and cat_entmun.municipio = pond_mun.municipio and ...
  #1 (permalink)  
Antiguo 03/04/2009, 10:31
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Contar número de filas repetidas

Saludos, tengo el sig. query en mysql:
Código:
select distinct cat_entmun.nom_ent,cat_entmun.entidad,
cat_entmun.nom_mun, cat_entmun.municipio 
from cat_entmun inner join pond_mun where 1=1 
and cat_entmun.municipio = pond_mun.municipio 
and cat_entmun.entidad = pond_mun.entidad 
and ciclo_pre='1' and ponderacion = 100
Y esta es la salida:
Código:
nom_ent                 entidad     nom_mun                 municipio   
'AGUASCALIENTES', '01', 'AGUASCALIENTES', '001'
'AGUASCALIENTES', '01', 'ASIENTOS', '002'
'AGUASCALIENTES', '01', 'CALVILLO', '003'
'AGUASCALIENTES', '01', 'JESUS MARIA', '005'
'AGUASCALIENTES', '01', 'PABELLON DE ARTEAGA', '006'
'AGUASCALIENTES', '01', 'RINCON DE ROMOS', '007'
'AGUASCALIENTES', '01', 'SAN JOSE DE GRACIA', '008'
'AGUASCALIENTES', '01', 'TEPEZALA', '009'
'AGUASCALIENTES', '01', 'EL LLANO', '010'
'AGUASCALIENTES', '01', 'SAN FRANCISCO DE LOS ROMO', '011'
'BAJA CALIFORNIA', '02', 'ENSENADA', '001'
'BAJA CALIFORNIA', '02', 'TECATE', '003'
'BAJA CALIFORNIA', '02', 'PLAYAS DE ROSARITO', '005'
Y así se va hasta terminar 1000 resultados.
Lo que yo quiero hacer es saber si puedo contar el número de veces que existe un resultado para entidad, algo como esto:

Código:
nom_ent        entidad   numero     nom_mun                 municipio   
'AGUASCALIENTES', '01', 1,  'AGUASCALIENTES', '001'
'AGUASCALIENTES', '01', 2,  'ASIENTOS', '002'
'AGUASCALIENTES', '01', 3,  'CALVILLO', '003'
'AGUASCALIENTES', '01', 4,  'JESUS MARIA', '005'
'AGUASCALIENTES', '01', 5,  'PABELLON DE ARTEAGA', '006'
'AGUASCALIENTES', '01', 6,  'RINCON DE ROMOS', '007'
'AGUASCALIENTES', '01', 7,  'SAN JOSE DE GRACIA', '008'
'AGUASCALIENTES', '01', 8,  'TEPEZALA', '009'
'AGUASCALIENTES', '01', 9,  'EL LLANO', '010'
'AGUASCALIENTES', '01', 10,  'SAN FRANCISCO DE LOS ROMO', '011'
'BAJA CALIFORNIA','02', 1,  'ENSENADA', '001'
'BAJA CALIFORNIA','02', 2,  'TECATE', '003'
'BAJA CALIFORNIA','02', 3,  'PLAYAS DE ROSARITO', '005'
He tratado con sum y count pero solo me muestra el total por cada entidad y yo quiero que los muestre todos.
  #2 (permalink)  
Antiguo 13/04/2009, 18:42
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Contar número de filas repetidas

alo?
Alguien sabe ?
  #3 (permalink)  
Antiguo 13/04/2009, 18:54
Avatar de David
Moderador
 
Fecha de Ingreso: abril-2005
Ubicación: In this planet
Mensajes: 15.720
Antigüedad: 19 años
Puntos: 839
Respuesta: Contar número de filas repetidas

Puedes usar GROUP BY (agrupar por ese campo), así con COUNT() obtendrás el número de campos agrupados.
__________________
Por favor, antes de preguntar, revisa la Guía para realizar preguntas.
  #4 (permalink)  
Antiguo 14/04/2009, 10:28
Avatar de DBMark  
Fecha de Ingreso: mayo-2008
Ubicación: Oxford
Mensajes: 35
Antigüedad: 16 años
Puntos: 6
Respuesta: Contar número de filas repetidas

Hola - Es posible que hagamos algo con el uso de variables.
Mi codigo no es completo y no usa el join de tu consulta, pero puedes investigar mas? -

Código:
select @rownum:=@rownum+1 rownum, nom_ent, nom_mun, entidada 
from
(select distinct nom_ent, nom_mun, entidada from cat_entnum) cc,
(SELECT @rownum:=0) r
 where entidada = '01'
union 
select @rownum2:=@rownum2+1 rownum, nom_ent, nom_mun, entidada 
from
(select distinct nom_ent, nom_mun, entidada from cat_entnum) cc,
(SELECT @rownum2:=0) r2
 where entidada = '02'
resulta con:

rownum nom_ent nom_mun entidada
1 AGUASCALIENTES AGUASCALIENTES 01
2 AGUASCALIENTES ASIENTOS 01
3 AGUASCALIENTES CALVILLO 01
4 AGUASCALIENTES JESUS MARIA 01
5 AGUASCALIENTES PABELLON DE ARTEAGA 01
6 AGUASCALIENTES RINCON DE ROMOS 01
1 BAJA CALIFORNIA ENSADA 02
2 BAJA CALIFORNIA TECATE 02
3 BAJA CALIFORNIA PLAYAS DE ROSARITO 02
4 BAJA CALIFORNIA OTRO SITIO 02
  #5 (permalink)  
Antiguo 15/04/2009, 11:26
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Contar número de filas repetidas

Cita:
Iniciado por David el Grande Ver Mensaje
Puedes usar GROUP BY (agrupar por ese campo), así con COUNT() obtendrás el número de campos agrupados.

Hice esto pero no es la salida que quiero
Código:
select distinct cat_entmun.nom_ent,count(cat_entmun.entidad),
cat_entmun.nom_mun, cat_entmun.municipio
from cat_entmun inner join pond_mun where 1=1
and cat_entmun.municipio = pond_mun.municipio
and cat_entmun.entidad = pond_mun.entidad
and ciclo_pre='1' and ponderacion = 100
group by cat_entmun.entidad
Por que así solo obtengo el número total para cat_entmun.entidad pero así no es lo que quiero...
Que más se puede hacer?

Cita:
Iniciado por DBMark Ver Mensaje
Hola - Es posible que hagamos algo con el uso de variables.
Mi codigo no es completo y no usa el join de tu consulta, pero puedes investigar mas?
DBMark me podrías explicar un poco tu solución, según yo solo estas aplicando una suma y muestra el resultado como número de fila.
  #6 (permalink)  
Antiguo 16/04/2009, 14:01
Avatar de DBMark  
Fecha de Ingreso: mayo-2008
Ubicación: Oxford
Mensajes: 35
Antigüedad: 16 años
Puntos: 6
Respuesta: Contar número de filas repetidas

Hola! Disculpa - La verdad es que no estoy cierto lo que buscas.

Si quieres devolver las sumas, la solucion de David el Grande esta bien?
Si quieres un numero incremento con cada fila (es decir algo parecido a rownum en Oracle), mi codigo puede funcionar.

Mark
  #7 (permalink)  
Antiguo 16/04/2009, 16:02
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar número de filas repetidas

Se puede hacer, pero el código es un poco complicado.
Requiere:
1. Iniciar una variable incremental dinámicamente en una consulta y otra variable de control de entidad.
2. El resultado de esa consulta se debe ordenar por nom_ent .
3. Hacer que sume si y sólo si la entidad es igual a la variable de control, sino que reinicie la incremental.
Algo así:
Código sql:
Ver original
  1. SELECT
  2.    nom_ent,
  3.    nom_mun,
  4.    municipio,
  5.    orden
  6. FROM
  7.    (SELECT
  8.         nom_ent,
  9.         nom_mun,
  10.         municipio,
  11.         (IF(@MUNI = municipio,(@SUMA:=@SUMA+1),@SUMA:=1)) orden,
  12.         @MUNI := municipio
  13.   FROM
  14.         (SELECT
  15.               CE.nom_ent,
  16.               CE.nom_mun,
  17.               CE.municipio,
  18.               @SUMA:=0,
  19.               @MUNI:=CE.municipio
  20.         FROM cat_entmun INNER JOIN pond_mun PM USING(municipio,entidad)
  21.         WHERE pm.ciclo_pre='1' AND pm.ponderacion = 100
  22.         ORDER BY nom_ent) T1
  23.    )T2;

Nota: El orden de las asignaciones (IF(@MUNI = municipio,(@SUMA:=@SUMA+1),@SUMA:=1)) orden, y @MUNI := municipio es mandatorio. No se los puede cambiar o el resultado no se obtendrá.
Pruébalo y me cuentas.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 17/04/2009, 09:32
 
Fecha de Ingreso: octubre-2008
Mensajes: 109
Antigüedad: 15 años, 6 meses
Puntos: 0
Respuesta: Contar número de filas repetidas

Me marca este error:
Código:
Unknown column 'CE.nom_ent' in 'field list'
Pero estas renombrando variables?
  #9 (permalink)  
Antiguo 17/04/2009, 09:41
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar número de filas repetidas

No, estoy usando ALIAS para acortar la longitud de la sentencia y hacerla más legible.

Código sql:
Ver original
  1. SELECT
  2.    nom_ent,
  3.    nom_mun,
  4.    municipio,
  5.    orden
  6. FROM
  7.    (SELECT
  8.         nom_ent,
  9.         nom_mun,
  10.         municipio,
  11.         (IF(@MUNI = municipio,(@SUMA:=@SUMA+1),@SUMA:=1)) orden,
  12.         @MUNI := municipio
  13.   FROM
  14.         (SELECT
  15.               CE.nom_ent,
  16.               CE.nom_mun,
  17.               CE.municipio,
  18.               @SUMA:=0,
  19.               @MUNI:=CE.municipio
  20.         FROM cat_entmun CE INNER JOIN pond_mun PM USING(municipio,entidad)
  21.         WHERE pm.ciclo_pre='1' AND pm.ponderacion = 100
  22.         ORDER BY nom_ent) T1
  23.    )T2;
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 17/04/2009, 09:42
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Contar número de filas repetidas

Verifica que los nombres de los campos se correspondan con el alias de la tabla a la que pertenecen.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:16.