๋ชฉ๋กData๐Ÿ“Š/SQL ์ฟผ๋ฆฌ ์Šคํ„ฐ๋”” (6)

EEALL@ONCE

๐Ÿ“Š ์ฟผ๋ฆฌ ์Šคํ„ฐ๋””(2) - ์‚ฌ์šฉ์ž ๋ณ„ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•œ ์ˆ˜์— ๋”ฐ๋ผ ์‚ฌ์šฉ์ž๋ฅผ ์„ ํƒ (HAVING / SUBQUERY / IN, EXISTS, ALL, ANY, SOME )

1. ๐Ÿ“Šํ…Œ์ด๋ธ” 2. ๐Ÿง ๋ฌธ์ œ 2๊ฐœ ์ด์ƒ์˜ ๊ฒŒ์‹œ๋ฌผ์„ ์ž‘์„ฑํ•œ ์‚ฌ์šฉ์ž๋งŒ ์„ ํƒํ•˜๊ณ  ์‹ถ๋‹ค. 3. ๐Ÿ’ก ํ•ด๊ฒฐ SELECT u.id, u.username FROM Users u WHERE u.id IN ( SELECT p.user_id FROM Posts p GROUP BY p.user_id HAVING COUNT(*) >= 2 ); ๐Ÿ”ด HAVING HAVING ์ ˆ์€ SQL์—์„œ ๊ทธ๋ฃนํ™”๋œ ๊ฒฐ๊ณผ์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ฅผ ์ œ๊ณต. ์ฆ‰, GROUP BY ์ ˆ๋กœ ๊ทธ๋ฃนํ™”๋œ ๊ฒฐ๊ณผ ์ค‘ ํŠน์ • ์กฐ๊ฑด์„ ๋งŒ์กฑํ•˜๋Š” ๊ทธ๋ฃน๋งŒ์„ ์„ ํƒํ•˜๊ณ  ์‹ถ์„ ๋•Œ ์‚ฌ์šฉ HAVING ์ ˆ์€ GROUP BY ์ ˆ๊ณผ ํ•จ๊ป˜ ์‚ฌ์šฉ๋˜๋ฉฐ, WHERE ์ ˆ๊ณผ ๋น„์Šทํ•˜๊ฒŒ ๋™์ž‘ํ•˜์ง€๋งŒ ์ค‘์š”ํ•œ ์ฐจ์ด์ ์ด ์žˆ์Œ! WHERE ์ ˆ์€ ๊ฐœ๋ณ„ ํ–‰์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ฅผ ์ œ๊ณตํ•˜๋Š” ๋ฐ˜๋ฉด, HAVING ์ ˆ์€ ๊ทธ๋ฃน์— ๋Œ€ํ•œ ํ•„ํ„ฐ๋ฅผ ์ œ๊ณต..

๐Ÿ“Š ์ฟผ๋ฆฌ ์Šคํ„ฐ๋””(1) - IFNULL / JOIN ์ „ ์กฐ๊ฑด / JOIN ํ›„ ์กฐ๊ฑด

๐Ÿ“Š ํ…Œ์ด๋ธ” : payment (์ˆ˜๋‚ฉ/ํ• ์ธ) / bill (์ฒญ๊ตฌ) ๐Ÿง๋ฌธ์ œ ์‚ฌํ•ญ: ์ฒญ๊ตฌ ํ…Œ์ด๋ธ”๊ณผ ์ˆ˜๋‚ฉ ํ…Œ์ด๋ธ”์ด ์žˆ๋Š”๋ฐ, ์ฒญ๊ตฌ ํ…Œ์ด๋ธ” ํ•ญ๋ชฉ์— ๋Œ€ํ•œ ์ˆ˜๋‚ฉ์ด ๋˜์—ˆ๋Š”์ง€๋ฅผ ์ฒดํฌํ•˜๊ณ  ์‹ถ๋‹ค. ๋‹ค๋งŒ ๋ชจ๋‘ ๋‚ฉ๋ถ€ ์ด์™ธ์—๋„ ๋ถ€๋ถ„์ ์œผ๋กœ ์ฐ”๋”์ฐ”๋” ๋‚ฉ๋ถ€ํ–ˆ์„ ๊ฐ€๋Šฅ์„ฑ๋„ ์žˆ๋Š” ์ƒํ™ฉ ๋˜ํ•œ ์ˆ˜๋‚ฉ ํ…Œ์ด๋ธ”์€ ๊ณ ๊ฐ์ด ์ˆ˜๋‚ฉํ•œ ๊ธˆ์•ก๋„ ์Œ“์ด์ง€๋งŒ ํšŒ์‚ฌ๊ฐ€ ํ• ์ธํ•ด์ฃผ๋Š” ๊ธˆ์•ก๋„ ์Œ“์ธ๋‹ค. (์ฆ‰ ์ฒญ๊ตฌ๊ธˆ-์ˆ˜๋‚ฉ๊ธˆ-ํ• ์ธ๊ธˆ=0 ์ด ๋˜์–ด์•ผ ์™„๋‚ฉ์ด ๋œ๋‹ค.) ๐Ÿ’ก์†”๋ฃจ์…˜: SELECT bill.bill_sn, bill.ban, bill.bill_item, bill.charge_money, SUM(IFNULL(pym.pym_amt, 0)), SUM(IFNULL(sale.pym_amt, 0)), (bill.charge_money - SUM(IFNULL(pym.pym_amt, 0)) ..