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

[SOLUCIONADO] extrar cantidad de registros diferentes

Estas en el tema de extrar cantidad de registros diferentes en el foro de Mysql en Foros del Web. hola referente a este post http://www.forosdelweb.com/f86/saber...tlook-1157033/ que me cuentas los correos dependiendo de su nombre servidor. tengo otra duda no encuentro la logica para hacerlo, ...
  #1 (permalink)  
Antiguo 25/01/2017, 08:54
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
extrar cantidad de registros diferentes

hola referente a este post
http://www.forosdelweb.com/f86/saber...tlook-1157033/

que me cuentas los correos dependiendo de su nombre servidor.

tengo otra duda no encuentro la logica para hacerlo, es la siguiente.

quiero estraer 2 correos con el servidor outlook y 1 de todos los demas.
pero teniendo en cuenta el nombre de dominio.

es posible esto?

resultado seria algo como

email
[email protected]
[email protected]
[email protected]
[email protected]
[email protected]

es decir de outlook 2 de los demas 1.
  #2 (permalink)  
Antiguo 25/01/2017, 09:20
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

Podria hacerse de esta manera:


Código SQL:
Ver original
  1. SELECT  completo FROM(
  2. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  3. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  4. ) AS t1
  5. ) AS t2 WHERE completo='outlook' LIMIT 2;
  6. UNION ALL
  7. SELECT COUNT(*), completo FROM(
  8. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  9. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  10. ) AS t1
  11. ) AS t2 WHERE completo<>'outlook' LIMIT 1;
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #3 (permalink)  
Antiguo 25/01/2017, 09:37
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

Cita:
Iniciado por Libras Ver Mensaje
Podria hacerse de esta manera:


Código SQL:
Ver original
  1. SELECT  completo FROM(
  2. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  3. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  4. ) AS t1
  5. ) AS t2 WHERE completo='outlook' LIMIT 2;
  6. UNION ALL
  7. SELECT COUNT(*), completo FROM(
  8. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  9. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  10. ) AS t1
  11. ) AS t2 WHERE completo<>'outlook' LIMIT 1;
hola, me da errores cambie alguna cosa como el length y los caracteres operativos pero algo esta mal en el union all.
no lo encuentro.
  #4 (permalink)  
Antiguo 25/01/2017, 09:40
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

Mi falla sorry:

Código SQL:
Ver original
  1. SELECT  completo FROM(
  2. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  3. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  4. ) AS t1
  5. ) AS t2 WHERE completo='outlook' LIMIT 2;
  6. UNION ALL
  7. SELECT  completo FROM(
  8. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  9. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  10. ) AS t1
  11. ) AS t2 WHERE completo<>'outlook' LIMIT 1;

Pruebalo de nuevo, el error era que en un union las columnas en los 2 queries deben de ser las mismas
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #5 (permalink)  
Antiguo 25/01/2017, 09:57
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

Cita:
Iniciado por Libras Ver Mensaje
Mi falla sorry:

Código SQL:
Ver original
  1. SELECT  completo FROM(
  2. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  3. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  4. ) AS t1
  5. ) AS t2 WHERE completo='outlook' LIMIT 2;
  6. UNION ALL
  7. SELECT  completo FROM(
  8. SELECT SUBSTRING(correo,1,INSTR(correo,'.')+1) AS completo FROM(
  9. SELECT SUBSTRING(email, INSTR(email,'@')+-, lenght(email)) AS correo FROM tabla
  10. ) AS t1
  11. ) AS t2 WHERE completo<>'outlook' LIMIT 1;

Pruebalo de nuevo, el error era que en un union las columnas en los 2 queries deben de ser las mismas
me sigue dando errores, saludos
  #6 (permalink)  
Antiguo 25/01/2017, 10:01
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

y cual es el error? El error es que no valido mis codigos de mysql y las sentencias son diferentes entre manejadores de datos :P

Código MySQL:
Ver original
  1. (
  2. correo varchar(300)
  3. );
  4.  
  5.  
  6.  
  7.  
  8.  
  9.  
  10. (SELECT  completo, correo FROM(
  11. SELECT SUBSTRING(correo1,1,INSTR(correo1,'.')-1) AS completo, correo FROM(
  12. SELECT SUBSTRING(correo, INSTR(correo,'@')+1, length(correo)) AS correo1, correo FROM tabla
  13. ) AS t1
  14. ) AS t2 WHERE completo='outlook' limit 2)
  15. (SELECT  completo, correo FROM(
  16. SELECT SUBSTRING(correo1,1,INSTR(correo1,'.')-1) AS completo, correo FROM(
  17. SELECT SUBSTRING(correo, INSTR(correo,'@')+1, length(correo)) AS correo1, correo FROM tabla
  18. ) AS t1
  19. ) AS t2 WHERE completo<>'outlook' group by completo)

Resultado:
Completo correo
outlook [email protected]
outlook [email protected]
yo [email protected]
tu [email protected]
otro [email protected]
aja [email protected]
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me

Última edición por Libras; 25/01/2017 a las 10:19
  #7 (permalink)  
Antiguo 25/01/2017, 10:38
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

funciona perfecto, muchas gracias.
  #8 (permalink)  
Antiguo 25/01/2017, 11:20
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

perdona que regrese pero por mucho que intento no consigo modificar la consulta para mostrar por ejemplo 5 correos de cada.

saludos
  #9 (permalink)  
Antiguo 25/01/2017, 11:37
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

O sea como? ahora que resultados quieres? Pediste 2 de outlook y 1 de los otros ahora quieres?
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #10 (permalink)  
Antiguo 25/01/2017, 11:55
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

es solo para entender la consulta desglosarla luego.

quiero mostrar 5 de cada grupo, por igual.
creo que hay que modificarla entera la sql verdad?
  #11 (permalink)  
Antiguo 25/01/2017, 12:11
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

Para mostrar 5 de cada grupo deberias de hacer algo como esto:

Código MySQL:
Ver original
  1. (
  2. correo varchar(300)
  3. );
  4.  
  5.  
  6.  
  7.  
  8.         completo,n as row_number,  correo
  9.     FROM
  10.       ( SELECT  @prev := '', @n := 0 ) init
  11.     JOIN
  12.       (        
  13.       SELECT  @n := if(completo != @prev, 1, @n + 1) AS n,
  14.                 @prev := completo,
  15.                 completo, correo
  16.             FROM  (
  17.                         SELECT  completo, correo FROM(
  18.                         SELECT SUBSTRING(correo1,1,INSTR(correo1,'.')-1) AS completo, correo FROM(
  19.                         SELECT SUBSTRING(correo, INSTR(correo,'@')+1, length(correo)) AS correo1, correo FROM tabla
  20.                         ) AS t1
  21.                         ) AS t2
  22.                         #WHERE completo<>'outlook'
  23.             ) as t3
  24.             ORDER BY
  25.                 completo   ASC         
  26.       ) x
  27.     WHERE  n <= 5
  28.     ORDER BY  completo, n;

Resultado:

aja 1 [email protected]
aja 2 [email protected]
otro 1 [email protected]
otro 2 [email protected]
outlook 1 [email protected]
outlook 2 [email protected]
outlook 3 [email protected]
tu 1 [email protected]
tu 2 [email protected]
tu 3 [email protected]
yo 1 [email protected]
yo 2 [email protected]
yo 3 [email protected]
yo 4 [email protected]
yo 5 [email protected]

Si ves el dominio "yo" tiene mas de 5 registros y solo muestra 5 en el query
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #12 (permalink)  
Antiguo 25/01/2017, 12:17
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

gracias nuevamente, la desglosarte para entenderla.
saludos
  #13 (permalink)  
Antiguo 25/01/2017, 12:21
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

Cita:
Iniciado por azaz Ver Mensaje
gracias nuevamente, la desglosarte para entenderla.
saludos
Si la entiendes me la explicas por favor ;)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #14 (permalink)  
Antiguo 26/01/2017, 05:45
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

Cita:
Iniciado por Libras Ver Mensaje
Si la entiendes me la explicas por favor ;)
sera que te lo cuente, me la tendrias que explicar tu a mi

no sabia que mysql trabaja con variables, bueno mas o menos entendi esto:

creas dos variables de inicializacion n,prev que se van rellenando con la condicion que recuperas de completo es decir el nombre del servidor recuperado, si es el mismo incrementas n(numero de registro) en +1 de lo contrario le asignas solo un registro porque no hay mas,para recuperar maximo 5 registros con el mismo completo(nombre servidor) le pones el condicional <=.

mas o menos entiendo eso pero no se que hace x?

saludos
  #15 (permalink)  
Antiguo 26/01/2017, 07:58
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: extrar cantidad de registros diferentes

simula la funcion row_number(funciond e mysql) usando una columna como partition(lo que quiere decir que por cada elemento repetido de la lista le asigna un numero de renglon) y al final regresa los renglones que sean menores o iguales a 5 :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
  #16 (permalink)  
Antiguo 27/01/2017, 14:25
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

hola, estoy probando la consulta desde mariadb y me da este error.

#1267 - Ilegal mezcla de collations (utf8_spanish_ci,IMPLICIT) y (utf8_unicode_ci,IMPLICIT) para operación '<>'

creo tener bien todos los collation
  #17 (permalink)  
Antiguo 28/01/2017, 09:10
 
Fecha de Ingreso: enero-2011
Mensajes: 1.150
Antigüedad: 13 años, 3 meses
Puntos: 10
Respuesta: extrar cantidad de registros diferentes

hola bueno solo era cambiar el cotejamiento de ese campo en este caso era ponerlo a utf8_unicode_ci.
saludos

Etiquetas: cantidad, registros
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 14:31.