joinInRealProject

์•„๋ž˜๋Š” ์‹ค๋ฌด์—์„œ ๋ฐ์ดํ„ฐ ์ถ”์ถœ์„ ์œ„ํ•ด์„œ ์‚ฌ์šฉํ–ˆ๋˜ ์ฟผ๋ฆฌ์ด๋‹ค.

SELECT
    SUM(ijt.total_amount) - SUM(IFNULL(ljt.payoff_money, 0)) AS '์ž”์•ก'
FROM
    bond AS b
    LEFT JOIN (
        SELECT
            ps.bond_id,
            SUM(IFNULL(ps.payoff_money, 0))
        FROM
            payoff_sheet AS ps
        WHERE
            ps.payoff_at < '2021-07-25 00:00:00'
        GROUP BY
            ps.bond_id) 
    AS ljt ON b.id = ljt.bond_id
    JOIN 
        product 
    AS ijt ON b.product_id = ijt.id
WHERE
    ijt.activated_at < '2021-07-30 00:00:00' 
    and ijt.activated_at >= '2021-07-01 00:00:00'
    and ijt.product_type="house-mortgage"
ORDER BY
    ijt.id desc;

bond : ์ฑ„๊ถŒ ํ…Œ์ด๋ธ”

payoff_sheet : ์ƒํ™˜๊ธˆ ์ง€๋ถˆ ๋‚ด์—ญ ํ…Œ์ด๋ธ”

product : ์ฑ„๊ถŒ์„ ๋ฐ”ํƒ•์œผ๋กœ ์ƒ์„ฑํ•œ ๋ชจ์ง‘ ์ƒํ’ˆ ํ…Œ์ด๋ธ”

์—ฌ๊ธฐ์„œ์˜ bond์™€ product๋Š” ์ผ๋Œ€์ผ ๊ด€๊ณ„์ด๊ณ (์ฑ„๊ถŒ ํ•˜๋‚˜์— ์ƒํ’ˆ ํ•˜๋‚˜), payoff_sheet์—์„œ๋Š” ์ƒํ™˜๊ธˆ ์ง€๋ถˆ ๋‚ด์—ญ์„ ๋ชจ๋‘ ๊ธฐ๋กํ•˜๋Š” ์žฅ๋ถ€๊ฐ™์€ ๊ฐœ๋…์œผ๋กœ ์ •์˜ํ•œ๋‹ค. ๊ทธ๋Ÿฌ๋‹ˆ๊นŒ payoff_sheet๋Š” ์ƒํ™˜๊ธˆ์„ ์ง€๋ถˆํ–ˆ์„ ๊ฒฝ์šฐ ๋ฐ์ดํ„ฐ๊ฐ€ ๋กœ์šฐ๋กœ ์Œ“์ด๋Š” ๊ฒƒ์ด๋‹ค.

from๊ตฌ๋ฌธ๋ถ€ํ„ฐ ๋ณด์ž. b left join ljt๋กœ left join์„ ํ•œ ํ…Œ์ด๋ธ”์„ ๋งŒ๋“ค์—ˆ๋‹ค. ljt๋Š” ์ผ๋ฐ˜ ํ…Œ์ด๋ธ”์ด ์•„๋‹ˆ๋ผ, payoff_sheet์—์„œ bond_id, sum(payoff_money) ๋‘ ๊ฐœ์˜ ์ปฌ๋Ÿผ๋งŒ ์„ ํƒํ•œ ์ปค์Šคํ…€ ํ…Œ์ด๋ธ”์ด๋‹ค. ๊ทธ๋ฆฌ๊ณ  group by bond_id๋ฅผ ํ•ด์คฌ๊ธฐ ๋•Œ๋ฌธ์— bond_id๋ณ„๋กœ sum์ด ์ ์šฉ๋œ payoff_money๋ฅผ ํ™•์ธํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ์ด๋‹ค.

์ด left join์„ ํ•œ ํ…Œ์ด๋ธ”์— ๋”ํ•ด์„œ productํ…Œ์ด๋ธ”๋„ inner join์„ ํ•ด์„œ ์ด 3๊ฐœ์˜ ํ…Œ์ด๋ธ”์„ ์ ์ ˆํžˆ ๋งคํ•‘ํ•œ ๊ฒƒ์ด๋‹ค.

์ฃผ์˜ํ•ด์•ผํ•  ๊ฒƒ์€ bond as b left join์„ ํ•˜๋А๋ƒ bond as b inner join์„ ํ•˜๋А๋ƒ๋Š” ๊ฒƒ์ธ๋ฐ ์ด ์กฐ์ธ์˜ ์ข…๋ฅ˜์— ๋”ฐ๋ผ ๊ฒฐ๊ณผ๋„ ๋‹ฌ๋ผ์ง„๋‹ค.

inner join์„ ํ•˜๊ฒŒ ๋˜๋ฉด ๊ทธ์— ๋”ฐ๋ผ ์กฐ๊ฑด์„ ์ถฉ์กฑ ๋ชปํ•˜๋Š” bond๋กœ์šฐ๋“ค์ด ์‚ญ์ œ๋จ์— ๋”ฐ๋ผ ijt.activated_at < '2021-07-30 00:00:00' and ijt.activated_at >= '2021-07-01 00:00:00' ์„ ๋งŒ์กฑ์‹œํ‚ค๋Š” ๋กœ์šฐ๋“ค์ด ์ค„์–ด๋“ค๊ฒŒ ๋œ๋‹ค.

where์ ˆ์˜ ijt.activated_at ์กฐ๊ฑด์€ ๋ชจ๋“  product์— ๋Œ€ํ•ด์„œ ์‹คํ–‰ํ•ด์•ผ ํ•˜์ง€๋งŒ ์ƒ๋žต๋œ product๋“ค์ด ์กด์žฌํ•˜๊ฒŒ ๋˜๋Š” ๊ฒƒ์ด๋‹ค.

AS ljt ON b.id = ljt.bond_id๋ถ€๋ถ„์—์„œ ์ƒํ™˜๋œ ๊ธˆ์•ก์ด ์žˆ๋‹ค๋ฉด ljt์— bond_id๊ฐ€ ์žˆ์–ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค์ง€๋งŒ ์ƒํ™˜๋œ ๊ธˆ์•ก์ด ์—†๋‹ค๋ฉด ljt์— bond_id๊ฐ€ ์—†์–ด์„œ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค ๋ชปํ•˜๊ธฐ ๋•Œ๋ฌธ์— inner joinํ•  ๊ฒฝ์šฐ ์กฐ๊ฑด์„ ๋งŒ์กฑ์‹œํ‚ค์ง€ ๋ชปํ•œ๋‹ค๋ฉด ๋กœ์šฐ๋Š” ์‚ญ์ œ๋œ๋‹ค.

๋”ฐ๋ผ์„œ inner join๊ณผ left join์˜ ์ฐจ์ด์ ์„ ๋ช…ํ™•ํžˆ ์•Œ๊ณ  ์ ์žฌ์ ์†Œ์— ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

Last updated