@eldar_web

Как правильно построить SQL-запрос?

Есть таблица: info_user
login | type (0,1) | sum
alia9 | type 1 | 40
krep | type 1 | 50
alia9 | type 0 | 70
krep | type 0 | 30
alia9 | type 1 | 40
krep | type 1 | 50
alia9 | type 0 | 70
krep | type 0 | 30

Где type=0 - это расход, 1 - приход. Я хочу выводить: логин | общую сумму расходов и приходов текущего пользователя
А для этого пишу запрос:
SELECT login, (SELECT sum(sum) FROM info_user WHERE type=0) AS rashod, (SELECT sum(sum) FROM info_user WHERE type=1) AS prihod GROUP BY login

Но этот запрос будет выводить общую сумму всех пользователей для каждого пользователя, то есть так:
login | rashod | prihod
alia9 | 200 | 180
krep | 200 | 180

А мне нужно, чтобы выводилось общая сумма каждого пользователя для него самого, т.е, так:
login | rashod | prihod
alia9 | 140 | 80
krep | 60 | 100

Как правильно составить?
  • Вопрос задан
  • 2393 просмотра
Пригласить эксперта
Ответы на вопрос 3
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
Правильно будет вместо type (0,1) просто сделать сумму знаковой, положительные - приход, отрицательные - расход. И будет тогда:
SELECT `login`, SUM(IF(`sum` > 0, `sum`, 0)) AS `in`, 
       SUM(IF(`sum` < 0, `sum`, 0)) AS `out`, SUM(`sum`) AS `total`
    FROM `info_user`
    GROUP BY `login`
Ответ написан
Комментировать
Vityarik
@Vityarik
SELECT
  LOGIN,
  SUM(IF(TYPE=0, SUM, 0)) OUT_COME,
  SUM(IF(TYPE=1, SUM, 0)) IN_COME,
FROM 
  INFO_USER
GROUP BY 
  LOGIN
Ответ написан
EndUser
@EndUser
select a."login", sum(b."sum"), sum(c."sum)
from "info_user" as a
left outer join "info_user" as b on a."login"=b.login and b.type=0
left outer join "info_user" as c on a."login"=c.login and b.type=1
group by a."login"
не?
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы