SQL - 각 열에 대한 조건
-
09-09-2020 - |
문제
이것은 일반적인 SQL 질문이지만, 데이터베이스가 Firebird 인 것을 알아야하는 경우에는 다음과 같습니다.
i이 테이블이 있습니다 (단순화 된) :
user amount type -------------------- john 25 credit john 20 debit john 5 debit john 15 credit mike 15 credit.
단일 쿼리를 사용하여 다음과 같이 결과를 갖고 싶습니다.
user credit debit -------------------- john 40 25 mike 15 NULL.
Where credit = SUM(amount) WHERE type=credit
and debit = SUM(amount) WHERE type=debit
.
기본적으로 필드의 합계 (이 경우 금액)는 필드의 합계를 기반으로 한 결과에 여러 개의 필드를 갖고 있습니다 (이 경우 유형).
어떤 제안에 미리 감사드립니다.
해결책
표준 SQL은 다음과 같습니다 :
SELECT "user",
SUM(CASE WHEN type='credit' then amount END) as Credit,
SUM(CASE WHEN type='debit' then amount END) as Debit
FROM
"table"
GROUP BY
"user"
. 다른 팁
나는 파이어 버드가 어떻게되는지 모르겠지만, 당신은 다음과 같은 일을 할 수 있습니까?
SELECT user,
sum(SELECT amount FROM table AS t2 WHERE t2.user = t1.user AND type="credit" ) AS credit,
sum(SELECT amount FROM table AS t3 WHERE t3.user = t1.user AND type="debit" ) AS debit
FROM table AS t1
GROUP BY user
ORDER BY user
.
PostgreSQL에있을 것으로 생각하는 것을 참조하는 경우, 필요한 것을 찾는 데 도움이되는 경우
시도 :
SELECT credit.user_name, credit.cre, debit.deb
FROM (SELECT user_name, SUM(amount) cre FROM t WHERE TYPE = 'credit' GROUP BY user_name) credit
LEFT OUTER JOIN (SELECT user_name, SUM(amount) deb
FROM t
WHERE TYPE = 'debit'
GROUP BY user_name) debit
ON (credit.user_name = debit.user_name)
. 제휴하지 않습니다 StackOverflow