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

Seleccionar el registro moda de un campo pero con un pequeño inconveniente...

Estas en el tema de Seleccionar el registro moda de un campo pero con un pequeño inconveniente... en el foro de Mysql en Foros del Web. Pues mis chavos lo q qiero es seleccionar la moda de una columna en mi tabla q se llama registros.. Importe Registros 1200 3 1100 ...
  #1 (permalink)  
Antiguo 25/05/2012, 18:36
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Seleccionar el registro moda de un campo pero con un pequeño inconveniente...

Pues mis chavos lo q qiero es seleccionar la moda de una columna en mi tabla q se llama registros..

Importe Registros
1200 3
1100 3
250 2

se como sacar la moda, utilizo el SELECT MAX() el problema es que por ejemplo en el caso anterior como hai dos numeros mayores repetidos me va a seleccionar el 3 con el primer importe y qiero q cuando encuentre casos asi los omita.. me explico?? haber si me pueden echar la mano ps xD
  #2 (permalink)  
Antiguo 26/05/2012, 11:22
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

creo que no te has explicado del todo bien. ¿Qué es exactamente lo que quieres obtener? Tu tabla se llama registros y en el campo importe los valores superiores son 1200 y 100; en el campo registro ambas tienen un valor 3 y dices querer omitir algo, si explicarlo, y no dices por qué. ¿Cuál debería ser el resultado y por qué, dinos eso?
  #3 (permalink)  
Antiguo 26/05/2012, 12:27
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

Cita:
Iniciado por jurena Ver Mensaje
creo que no te has explicado del todo bien. ¿Qué es exactamente lo que quieres obtener? Tu tabla se llama registros y en el campo importe los valores superiores son 1200 y 100; en el campo registro ambas tienen un valor 3 y dices querer omitir algo, si explicarlo, y no dices por qué. ¿Cuál debería ser el resultado y por qué, dinos eso?
Mira, tengo una tabla de una nomina, que tiene como campos Categoria, Concepto, Importe y Registros. De eso tengo que obtener el importe MODA y para eso hago esto:

1. Selecciono los conceptos y los agrupo para saber cuantos hay de cada categoria con su correspondiente concepto (aqui no tomo en cuenta el importe)...
CATEG CTO REG
A01803 07 907
A01805 07 38
A01806 07 633
A01807 07 373

2. De ahi ahora agrupo para saber cuantas categorias hai con su concepto respectivo y sus importes, algo asi:
CATEG CTO IMPORTE REG
A01803 07 -4486.1 2
A01803 07 -2243.05 1
A01803 07 2243.05 855
A01803 07 6729.15 14
A01803 07 8972.2 14

3. Ahora de ahi tengo que sacar cual es el importe MODA de cada categoria con su concepto, por ejemplo en los registros anteriores el importe MODA es el que tiene 855 registros con ese importe ya que es el que mas personas tienen.. todo iba bien hasta que me di cuenta de un problemita, mi consulta para sacar la moda era esta:

select Categoria, Concepto, Importe, MAX(Registros) AS Registros FROM dispersion07 group by Categoria, Concepto order by Categoria, Concepto

pero a la hora de analizarla bien me di cuenta que podria tener una falla y es cuando me encuentre con casos como este:

MA01026 07 1996.35 1
MA01026 07 2040.42 1

esta categoria tiene 2 registros pero con importe diferente osea que no hay moda y lo que me muestra con la consulta anterior es solo el primer registro, tambien se podria dar el siguiente caso:

MA01026 07 1996.35 3
MA01026 07 2040.42 3
MA01026 07 1000.35 3
MA01026 07 800.42 2

y en este caso si hay numero mayor de registros pero su importe es diferente por lo tanto no puedo tomar el 3 como MODA y mi consulta me da el primer registro de esos 4 osea el MA01026 07 1996.35 3...

ahora bien, lo que quiero es que tome el registro moda de cada categoria osea el que mas registros tiene con el mismo importe pero que me omita ese tipo de casos antes mencionados...

Gracias por la atencion espero y ahora si me haya explicado..

Última edición por kronos1198; 26/05/2012 a las 12:31 Razón: falta texto xD
  #4 (permalink)  
Antiguo 26/05/2012, 13:32
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

si te he entendido bien, debes agrupar por concepto, categoria e importe y sacar la cuenta
Código SQL:
Ver original
  1. SELECT t1.Categoria, t1.Concepto, t1.Importe, t1.tot FROM
  2. (SELECT Categoria, Concepto, Importe, COUNT(*) tot FROM dispersion07 GROUP BY Categoria, Concepto, Importe ORDER BY Categoria, Concepto, tot DESC)t1 GROUP BY t1.Categoria, t1.Concepto, t1.Importe
No lo he probado

Última edición por gnzsoloyo; 07/12/2013 a las 11:58
  #5 (permalink)  
Antiguo 26/05/2012, 14:22
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

Cita:
Iniciado por jurena Ver Mensaje
si te he entendido bien, debes agrupar por concepto, categoria e importe y sacar la cuenta
SELECT t1.Categoria, t1.Concepto, t1.Importe, t1.tot FROM
(SELECT Categoria, Concepto, Importe, count(*) tot FROM dispersion07 group by Categoria, Concepto, Importe order by Categoria, Concepto, tot DESC)t1 GROUP BY t1.Categoria, t1.Concepto, t1.Importe

No lo he probado
Hermano a que te refieres con t1??

gracias por contestar tan rapido de echo ahorita estoy trabajando con eso :D
  #6 (permalink)  
Antiguo 27/05/2012, 05:11
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

t1 es un alias de la subconsulta entre paréntesis. Convertiría esa en algo así como una tabla y los valores que devuelve en esus campos, que retomo en la consulta.
  #7 (permalink)  
Antiguo 29/05/2012, 19:41
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

jurena muchas gracias me sirvio mucho todo lo qe me explicaste y ya obtengo los registros moda como podras ver a continuacion:

Cat Con Imp reg
A01803 07 -4486.1 855
A01805 07 -15701.35 35
A01806 07 -8154.15 618
A01807 07 11379.68 364
A01820 07 15701.35 1869
A02804 07 2447.17 3

ahora hai un probllemita, esos registros tienen mal unicamente el importe, de ahi todo esta bien, deberian ser asi:

A01803 07 2243.05 855
A01805 07 2243.05 35
A01806 07 2718.05 618
A01807 07 2844.92 364
A01820 07 2243.05 1869
A02804 07 2447.17 3

mi consulta la vdd no se porqe no me toma el importe correspondiente de cada registro, has de cuenta qe del primero toma el negativo porque en mi tabla se encuentra asi:

Cat Con Imp reg Tot
A01803 07 -17944.4 1 5
A01803 07 -4486.1 2 1
A01803 07 6729.15 14 2
A01803 07 -6729.15 17 1
A01803 07 2243.05 855 1

toma todo bien pero me toma siempre el primer importe por eso los primeros registros que te mostre estan mal, aqui la consulta haber si le encuentras la falla:

select Categoria, Concepto, Importe, max(registros) as Moda FROM conteo_registrosdispersion07 where Totales = '1' group by Categoria, Concepto order by Categoria, Concepto
  #8 (permalink)  
Antiguo 30/05/2012, 11:14
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

kronos1198,
tu consulta agrupa por categoría y concepto y en el caso de MySQL te permite mostrar el importe aunque no lo agrupes, pero tiene el inconveniente de que muestra el primer valor que encuentra en ese agrupado al recorrer las tuplas. Si quieres obtener el valor más algo, o el valor más bajo, o sencillamente quieres agrupar también por valor tienes que decirlo. Si quieres el más alto o el más bajo, habrá que hacer una subconsulta como te puse en mi ejemplo.
  #9 (permalink)  
Antiguo 31/05/2012, 14:04
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

Cita:
Iniciado por jurena Ver Mensaje
kronos1198,
tu consulta agrupa por categoría y concepto y en el caso de MySQL te permite mostrar el importe aunque no lo agrupes, pero tiene el inconveniente de que muestra el primer valor que encuentra en ese agrupado al recorrer las tuplas. Si quieres obtener el valor más algo, o el valor más bajo, o sencillamente quieres agrupar también por valor tienes que decirlo. Si quieres el más alto o el más bajo, habrá que hacer una subconsulta como te puse en mi ejemplo.
Todo lo que me dices es correcto y lo se jeje el punto es que no qiero ni el importe mas alto ni el mas bajo... qiero q me de el importe de la tupla q tiene la moda independientemente de que sea el mas alto o mas bajo... ese es mi unico problemita ya, solucionando eso mi consulta qedaria a la perfeccion
  #10 (permalink)  
Antiguo 10/12/2013, 11:53
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años
Puntos: 300
Respuesta: Seleccionar el registro moda de un campo pero con un pequeño inconveniente

Si te refieres a la moda, habrá probablemente más de una tupla, pero es que además puede haber varias modas. Pero es que la moda estadística depende de varios condicionantes. Mira aquí:
http://www.vitutor.com/estadistica/descriptiva/a_8.html

Etiquetas: moda, registro, registros, select, tabla, campos
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.
Tema Cerrado




La zona horaria es GMT -6. Ahora son las 09:34.