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

Seleccionar "el resto" y sumarlo -Otra vez -

Estas en el tema de Seleccionar "el resto" y sumarlo -Otra vez - en el foro de Mysql en Foros del Web. Que tal, Estoy utilizando esta consulta: Código PHP: ( SELECT country ,  COUNT ( provider_id )AS  total FROM provider GROUP by country ORDER BY total DESC Limit 5 ) UNION ( SELECT  'otros'  AS  country ,  ...
  #1 (permalink)  
Antiguo 11/10/2005, 07:42
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Seleccionar "el resto" y sumarlo -Otra vez -

Que tal, Estoy utilizando esta consulta:

Código PHP:
(SELECT countryCOUNT(provider_id)AS total
FROM provider GROUP by country ORDER BY total DESC Limit 5
)
UNION
(SELECT 'otros' AS countryCOUNT(provider_id) AS total FROM provider WHERE NOT EXISTS (SELECT countryCOUNT(provider_id)AS total
FROM provider GROUP by country ORDER BY total DESC Limit 5
)) 

Que me saca lo siguiente:



Como se vé no alcanza a hacer la Suma de la forma que necesito que sería:




Agradezco toda la ayuda.
  #2 (permalink)  
Antiguo 13/10/2005, 01:38
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Estoy peleandome con tu consulta, ya que la dejamos a medias anteriormente, pero no consigo darle la vuelta, en cuanto consiga algo, te lo hago saber.
  #3 (permalink)  
Antiguo 13/10/2005, 01:41
Avatar de Vice  
Fecha de Ingreso: agosto-2003
Mensajes: 613
Antigüedad: 20 años, 8 meses
Puntos: 2
Una forma sencilla de sacar eso es:
Código:
(SELECT country, COUNT(provider_id)AS total
FROM provider where country in ('Espana', 'Argentina', 'England', 'Ecuador', 'Germany') GROUP by country ORDER BY total DESC Limit 5)
UNION
(SELECT 'otros' AS country, COUNT(provider_id) AS total FROM provider where not country in ('Espana', 'Argentina', 'England', 'Ecuador', 'Germany'))
Otra forma ya sería empleando un if/case en la select.
Un saludo.
__________________
Estoy contagiado de Generación-I
  #4 (permalink)  
Antiguo 13/10/2005, 07:29
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Ok, Muchas gracias por contestar.

Vice, me saca esto utilizando tu valiosa ayuda, sería interesante lo de los if que dices porque es algo que desconozco.




Saludos.
  #5 (permalink)  
Antiguo 13/10/2005, 09:43
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Tengo una solución para ti, pero hay un pequeño problema, bueno primero el codigo:
Código:
(SELECT country, COUNT(*) AS total FROM provider_id GROUP by country ORDER BY total DESC Limit 5 )
union
(
select 'otros' as country, count(*) as total from provider_id PI where
(select count(*) from  provider_id  where country=PI.country)<
(select count(*) as total from  provider_id group by country order by total desc limit 1)
)
Pero con esta hay un pequeñísimo problema y es que si por ejemplo, la posicion nº 6 y la nº 5 tienen el mismo count sólo aparecerá hasta la 5 (eso bien) pero en otros la posicion nº 6 no será contada.

Pero sigo investigando.
  #6 (permalink)  
Antiguo 13/10/2005, 10:34
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Agrezco el Interés, fíjate que si muestra la consulta:



Pero la operación no dá, porque los proveedores que tengo son 2430 entonces en otros debiera aparecer 1064 y no 1951.

Por cierto y para ir Aprendiendo el PI que utilizas qué es? Primera vez que lo veo.

Saludos y Gracias de nuevo.
  #7 (permalink)  
Antiguo 13/10/2005, 10:48
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Haz esto y dime que te da:

Código:
SELECT country, COUNT(*) AS total FROM provider_id GROUP by country having total=156
Si te salen más paises además de Alemania el problema es debido a lo que te comento, que en otros, no sólo no se toma Alemania si no que tampoco se toman los que tienen el mismo count
  #8 (permalink)  
Antiguo 13/10/2005, 10:55
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
perdón, me lo había comido:

Código:
(SELECT country, COUNT(*) AS total FROM provider_id GROUP by country ORDER BY total DESC Limit 5 )
union
(
select 'otros' as country, count(*) as total from provider_id PI where
(select count(*) from  provider_id  where country=PI.country)<
(select count(*) as total from  provider_id group by country order by total desc limit 1 offset 5)
)
  #9 (permalink)  
Antiguo 13/10/2005, 11:57
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Saca esto con las consultas:



Y:


  #10 (permalink)  
Antiguo 14/10/2005, 09:54
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
Perdón llevás de nuevo razón, el offset es a 4 no a 5, ya que el primero es 0 no 1, quedaría:

Código:
(SELECT country, COUNT(*) AS total FROM provider_id GROUP by country ORDER BY total DESC Limit 5 )
union
(
select 'otros' as country, count(*) as total from provider_id PI where
(select count(*) from  provider_id  where country=PI.country)<
(select count(*) as total from  provider_id group by country order by total desc limit 1 offset 4)
)
Pero siempre con la limitación que te comento.
  #11 (permalink)  
Antiguo 14/10/2005, 10:49
 
Fecha de Ingreso: octubre-2005
Mensajes: 365
Antigüedad: 18 años, 6 meses
Puntos: 0
Funciona Perfecto, Gracias

Código PHP:
(SELECT countryCOUNT(*) AS total FROM provider GROUP by country 
ORDER BY total DESC Limit 5 
)
union
(select 'otros' as countrycount(*) as total from provider PI where
(select count(*) from  provider  where country=PI.country)<(select count(*) 
as 
total from  provider group by country order by total desc limit 1 offset 4)) 



Cita:
Iniciado por Jose_minglein2
Pero con esta hay un pequeñísimo problema y es que si por ejemplo, la posicion nº 6 y la nº 5 tienen el mismo count sólo aparecerá hasta la 5 (eso bien) pero en otros la posicion nº 6 no será contada.

Pero sigo investigando.
José exactamente la excepción es si "tienen el mismo count" Esto quiere decir por ejemplo que el número de Germany y de "otros" sea exactamente 156 para los dos?
  #12 (permalink)  
Antiguo 14/10/2005, 11:35
Avatar de Jose_minglein2  
Fecha de Ingreso: noviembre-2004
Mensajes: 2.344
Antigüedad: 19 años, 5 meses
Puntos: 8
no esto es p.ej:

España -> 200
Italia -> 190
Francia -> 180
Argentina ->170
Colombia -> 160
Uruguay -> 160
Mexico ->150

Pues en vez de de Otros -> 310 que es lo que te debería salir te saldrá Otros-> 150 y Uruguay se lo comerá, no saldrá ni en los 5 primeros ni se contabilizará en otros.

Pero que conste que sigo investigando.
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 02:22.