Bases de Datos > MySQL
Consulta suma de valores mas neto segun signo
(1/1)
Martillo:
Hola
tengo una base de datos la cual no puedo modificar, tiene los siguiente campos
ticket - numero transaccion
login - login usuario
profit - ganacia o perdida del usuario (puede ser un numero + o -)
ticket login profit
2121 20 10000
2122 20 15000
2123 20 -15000
y necesito sumar en distintos campos el total de ganancias con perdidas mas su neto
SELECT login, if (profit < 0, sum(profit), '' ) as perdida, if (profit > 0, sum(profit), '' ) as ganancia FROM `tabla` where login = 20;
pero me retorna solo el primero campo.
login perdida ganancia
20 10000
necesito que me retorne algo como lo siguiente, una sumatoria de todas las perdidas, junto con todas las ganancias y que me genere un neto con la suma de estos dos valores, algo asi.
login perdida ganancia neto
20 -15000 250000 10000
alguien me podria guiar como hacerlo por favor.
saludos.
RadicalEd:
Puede que la respuesta que te daré te frustré, aunque puede que no sea así; pero la forma que veo más fácil de hacerlo es utilizando un lenguaje de por medio que te extraiga esos datos y te los imprima, ya que directamente desde el motor no lo vas a poder hacer.
Es solo lo que yo pienso que es, pueda que no sea así y otro forero te pueda ayudar.
goldenscriptup:
Yo creo que si se puede realizar con solo consultas en SQL :) , solo hay que usar un poco la imaginacion :comp: .
Yo hice este query y me regresa.
login ganancia perdida neto
20 25000 -15000 10000
--- Código: SQL --- SELECT DISTINCT a.login,(SELECT SUM(df.profit) FROM pruebadatos df WHERE df.profit > 0 AND df.login = a.login) AS ganancia,(SELECT SUM(wq.profit) AS perdida FROM pruebadatos wq WHERE wq.profit < 0 AND wq.login = a.login) AS perdida,(SELECT SUM(lk.profit) FROM pruebadatos lk WHERE lk.profit > 0 AND lk.login = a.login)- ABS((SELECT SUM(yu.profit) AS perdida FROM pruebadatos yu WHERE yu.profit < 0 AND yu.login = a.login)) AS neto FROM pruebadatos a WHERE a.login = 20;
Yo pienso que tambien se puede hacer de alguna otra forma pero esta es la forma que se me ocurrio :alien: .
Espero que te sea de utilidad ;)
F_Tanori:
Tambien puedes probar de esta manera ...
--- Código: SQL ---SELECT login, SUM(IF (profit<0,profit *-1,0)) AS perdida, SUM(IF (profit>0,profit,0)) AS ganancia,(SUM(IF (profit>0,profit,0)) - SUM(IF (profit<0,profit *-1,0))) AS Neto FROM `tabla`WHERE Login =20GROUP BY Login
Saludos
Navegación
Ir a la versión completa