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

Consulta sql

Estas en el tema de Consulta sql en el foro de Mysql en Foros del Web. Hola llevo un dia entero para sacar una consulta de una tabla. Necesito seleccionar que empleado gano mas y perdió menos de un mes. la ...
  #1 (permalink)  
Antiguo 18/05/2012, 09:07
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Consulta sql

Hola llevo un dia entero para sacar una consulta de una tabla. Necesito seleccionar que empleado gano mas y perdió menos de un mes.

la tabla es asi:

empleado,ganancias,estado,mes

juan,23,0,abril
juan,5,1,abril
juan,15,1,abril
juan,23,0,abril
pablo,50,0,abril
pablo,45,0,abril
pablo,50,1,abril
mario,50,1,abril
mario,50,1,abril
mario,50,1,abril
mario,250,0,abril

El estado dice si gano o nó, sino ganó es 1 si ganó es 0

NEcesito ordenarlo de por el que mas ganó y menos perdió en un mes y la verdad es que ya no tengo ni idea. Esa misma fila se repite x veces.

Se puede hacer eso en sql???
  #2 (permalink)  
Antiguo 18/05/2012, 09:22
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta sql

Hola Wannie:

Veo que es tu primer mensaje en el Foro, así es que antes que nada Bienvenid@

Cita:
Se puede hacer eso en sql???
Si esa es tu pregunta, la respuesta es si, se puede hacer esto y mucho más con SQL...

Dices que no tienes idea de como resolver el problema... aquí algunas ideas que te pueden servir.

1. Pregúntale a San GOOGLE o a Santa Wikipedia acerca de las funciones de agrupación (en tu caso SUM)... deberás preguntar también acerca de la cláusula GROUP BY que se utiliza junto a esta función.

2. Investiga también acerca de condiciones (IF o CASE-WHEN), ya que deberás hacer sumas condicionales, es decir, por un lado sumar las ganancias y por otro lado sumar las pérdidas... la ganancia o pérdida total se obtiene al restar estas sumatorias.

3. Intenta hacer la consulta por tu propia cuenta, si tienes problemas entonces postea algo de lo que intentaste hacer y con gusto te ayudamos a afinar la consulta.

finalmente y este es el punto más importante... recuerda que aquí no hacemos el trabajo de otros, cuando publiques una pregunta en el post trata de ser puntual en tus dudas, no dejes los temas tan abiertos. Lo mínimo que esperamos en los foristas es que al menos hagan el intento por resolver ellos mismos sus consultas, ya sea con ayuda de San GOOGLE o experimentando directamente con el motor de BD.

Saludos
Leo.
  #3 (permalink)  
Antiguo 18/05/2012, 09:31
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

no, si el intento ya lo hice

SELECT DISTINCT empleado from empleados ORDER BY (SELECT SUM(ganancias) from empleados WHERE mes = "Abril" AND estado='0' ) DESC

pero no se seguir
  #4 (permalink)  
Antiguo 18/05/2012, 09:54
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Solucionado

SELECT DISTINCT empleado from empleados ORDER BY (SELECT SUM(ganancias) from empleados WHERE mes = "Abril" AND estado='0' ) - (SELECT SUM(ganancias) from empleados WHERE mes = "Abril" AND estado='1' ) DESC

Me ha servido mas escribirlo aqui que pensarlo mentalmente...

Gracias a todos y sobre todo a mi familia que siempre me a apoyado y a mis amigos que siempre han estado y mi novia por aguantar mis locuras en general gracias todos por hacer realidad un sueño.



IF o CASE-WHEN dice el pollo.....
  #5 (permalink)  
Antiguo 18/05/2012, 10:03
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Consulta sql

hola de nuevo Wanni... Lamentablemente no soy adivino como no pusiste ningún código en el post resulta imposible saber qué es lo que hiciste o intentaste hacer...

analicemos tu consulta... En primer lugar, la cláusula distinct sirve para mostrar los registros distintos, en este caso te mostraría a juan, pablo y mario... sin embargo el criterio de ordenación tiene varios problemas...

en primer lugar, al hacer un SUM sin poner la cláusula GROUP BY estás obteniendo una suma total, no una suma para cada uno de los empleados... (es por esto que pongo el punto numero 1 de mi post)

Cita:
1. Pregúntale a San GOOGLE o a Santa Wikipedia acerca de las funciones de agrupación (en tu caso SUM)... deberás preguntar también acerca de la cláusula GROUP BY que se utiliza junto a esta función.
Segundo, al hacer SUM ganancias NO ESTÁS DIFERENCIANDO ENTRE GANANCIAS Y PÉRDIDAS... todas las estás considerando como ganancias... es por esto que en el punto dos te hablo de las sumas condicionadas:

Cita:
2. Investiga también acerca de condiciones (IF o CASE-WHEN), ya que deberás hacer sumas condicionales, es decir, por un lado sumar las ganancias y por otro lado sumar las pérdidas... la ganancia o pérdida total se obtiene al restar estas sumatoria
Ojo... no se vale decir que no sabes por donde seguir... creo que los tips son claros...

Saludos
Leo.
  #6 (permalink)  
Antiguo 18/05/2012, 10:06
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

creo que me has contestado al primer mensaje mio con la primera consulta ahora va fino.

Gracias de todas formas
  #7 (permalink)  
Antiguo 18/05/2012, 10:11
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Consulta sql

Y no probaste con:

Código MySQL:
Ver original
  1. SELECT empleado, MAX(SUM(ganancias)), MIN(SUM(ganancias)) FROM tabla WHERE mes = 'abril' AND estado = 1 GROUP BY empleado.

No me puse a probarlo pero a lo mejor te resulta mas corto y eficiente hacerlo asi, revisalo cualquier cosa nos dices.

Saludos
  #8 (permalink)  
Antiguo 18/05/2012, 10:18
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Cita:
Iniciado por djaevi Ver Mensaje
Y no probaste con:

Código MySQL:
Ver original
  1. SELECT empleado, MAX(SUM(ganancias)), MIN(SUM(ganancias)) FROM tabla WHERE mes = 'abril' AND estado = 1 GROUP BY empleado.

No me puse a probarlo pero a lo mejor te resulta mas corto y eficiente hacerlo asi, revisalo cualquier cosa nos dices.

Saludos
si es ganancias el campo estado es "0" si es perdidas es "1" con eso la verdad es que no se muy bien que saldrá.

Gracias por todo
  #9 (permalink)  
Antiguo 18/05/2012, 22:54
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Consulta sql

Ah pense que necesitabas comparar el que mas habia hecho con el que menos habia hecho, para el caso que necesitas entonces la consulta te quedaria asi:

Código MySQL:
Ver original
  1. empleado,
  2. SUM(if(estado = 0 AND mes ='abril',ganancias,0)) - SUM(if(estado = 1 AND mes ='abril',ganancias,0)) AS Balance
  3. FROM empleados
  4. GROUP BY empleado;
  #10 (permalink)  
Antiguo 19/05/2012, 11:32
 
Fecha de Ingreso: mayo-2012
Mensajes: 7
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Consulta sql

Sabeis algun manual para el sum(if ??? es para comprender if(estado = 0 AND mes ='abril',ganancias,0) el orden de las variables

no encuentro nada por google
  #11 (permalink)  
Antiguo 20/05/2012, 05:57
 
Fecha de Ingreso: mayo-2012
Mensajes: 42
Antigüedad: 11 años, 11 meses
Puntos: 5
Respuesta: Consulta sql

Hola wanni,

El problema es que no buscas correctamente. Jeje. El sum() es una función y el if() otra. Divide y vencerás.

if() => http://dev.mysql.com/doc/refman/5.0/en/control-flow-functions.html#function_if

sum() => http://dev.mysql.com/doc/refman/5.0/en/group-by-functions.html#function_sum

¡Un saludo!
  #12 (permalink)  
Antiguo 20/05/2012, 11:33
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Consulta sql

Lo que hace la consulta es buscar la suma SUM() de ganancias agrupando por usuario usando GROUP BY empleado, lo que hace el primer sum es sumar en caso de que el estado sea 0 y el mes abril, el if en mysql es mas o menos asi IF (condicion,VALOR DEVUELTO SI ES VERDADERO, VALOR DEVUELTO SI ES FALSO), entonces si tu por ejemplo pones IF(1 > 2, 10 , 20) este if devolvera 20 porque su condicion es falsa ya que 1 no es mayor a 2, entonces lo que hice es que si el estado de la consulta es 0 devuelva el valor mismo de ganancias caso contrario devuelva 0 asi no suma nada, lo mismo en la otra consulta si el estado es 1 devuelva ganancias y sino devuelva 0 asi separo en los 2 sum los resultados de ganancias que deben sumarse, igualmente te recomiendo que veas los enlaces que te dejo davikt.

Saludos

Etiquetas: sql, tabla
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 15:43.