๊ทธ๋ฃน๋ณ ์์ ์ถ๋ ฅ ์ฟผ๋ฆฌ Mysql row_number()
mysql 8 ๋ฒ์ ์ด์์์๋ row_number() ํจ์๋ฅผ ์ง์ํ๋ค.
์.. ๊ฐ์ฉ์ด. ์๋ ์์ ์๋ row_number() ํจ์๊ฐ ์์ด์ ์ฟผ๋ฆฌ ๊ธธ์ด๋ ๋ฌด์๊ฒ ๊ธธ๊ณ , ์ฑ๋ฅ๋ ๊ตฌ๋ ค์ ๊ฑ ์ฝ๋๋ก ๋๋ ค ๋ฐ์๋..
์ค๋ผํด ๋ณด๊ณ ์นจ ํ๋ฆฌ๋ ์์ ์ด ์์๋๋ฐ.. ใ
๊ธฐ๋ณธ ์ฌ์ฉ๋ฒ์ ์๋ก์ผ ์ฐ๊ณ ,
ROW_NUMBER() OVER (<partition_definition> <order_definition>)
<partition_definition> : PARTITION BY <expression>,[{,<expression>}...]
์ด ๋ถ๋ถ์ ํน์ ์ปฌ๋ผ์ด๋ ์กฐ๊ฑด์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๊ทธ๋ฃน์ง์ด ์๋ฒ์ ๋งค๊ฒจ์ค๋ค. group_by์ ๊ฐ๋ค๊ณ ๋ณด๋ฉด ๋จ.
ํ๋๋ง ์ธ ์ ์๋๊ฑด ์๋๊ณ , ์ฝค๋ง(,)๋ก ์ฌ๋ฌ๊ฐ ์ง์ ์ด ๊ฐ๋ฅ.
๊ตณ์ด ๋ฃ์ ํ์ ์๋ค๋ฉด ์๋ฃ์ด๋ ์๊ด์์.
<order_definition> : ORDER BY <expression> [ASC|DESC],[{,<expression>}...]
์๋ฒ์ ๋งค๊ธธ ๋, ํน์ ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์๋ฒ์ ๋งค๊ธธ ์ ์๋ค.
๊ฐ์ฅ ๊ธฐ๋ณธ ์ ์ธ ์ฌ์ฉ๋ฒ๋ถํฐ
1. ์๋ฒ ๋งค๊ธฐ๊ธฐ
SELECT
ROW_NUMBER() OVER ( ORDER BY group_no ) row_num,
group_no,
name,
use_yn,
from_unixtime(reg_date) as reg_date
FROM
test
ORDER BY
group_no;
test ํ
์ด๋ธ์ group_no ๊ธฐ์ค์ผ๋ก ์๋ฒ์ ๋งค๊ธฐ๊ณ ์ถ๋ค๋ ๋ด์ฉ
2. ๊ทธ๋ฃน๋ณ ์๋ฒ ๋งค๊ธฐ๊ธฐ
ํ์ง๋ง ๋ด๊ฐ ํ๊ณ ์ถ์๊ฑด, group_no ๊ธฐ์ค์ผ๋ก, group_no ๋ณ๋ก ์๋ฒ์ ๋งค๊ธฐ๊ณ ์ถ๋ค.
์ด๋ด ๋ partition์ ์ ์ํด์ฃผ๋ฉด ๋๋ค.
group_no ์ปฌ๋ผ ๊ธฐ์ค์ผ๋ก ์๋ฒ์ ๋งค๊ฒจ์ค๋ค.
SELECT
ROW_NUMBER() OVER ( partition by group_no ORDER BY group_no ) row_num,
group_no,
name,
use_yn,
from_unixtime(reg_date) as reg_date
FROM
test
ORDER BY
group_no;
3. ๊ทธ๋ฃน๋ณ ์๋ฒ ๋งค๊ธฐ๊ธฐ - ์กฐ๊ฑด ํฌํจ
๋ฌถ์ ๋จ์๋ก ์๋ฒ์ ๋งค๊ธฐ๋, ํน์ ์ปฌ๋ผ ๊ฐ์ด null์ด๊ฑฐ๋ ์กฐ๊ฑด์ ๋ง์ง ์๋ ๋ฐ์ดํฐ๋ ์๋ฒ์ ๊ฑด๋๋ฐ๊ณ ๋งค๊ฒจ์คซ์ผ๋ฉด ์ข๊ฒ ์.
[ 1, 2, null ] ๋๋ [ null, 1, 2 ] ๋๋ [ 1, null, 2]
์ด๋ฐ์์ผ๋ก ์ถ๋ ฅ ๋๊ธธ ์ํจ
SELECT
(case when use_yn = 'Y' then
ROW_NUMBER() OVER ( partition by group_no,
(case when use_yn = 'Y' then 1 else 0 end) ORDER BY group_no )
END ) as row_num,
group_no,
name,
use_yn,
from_unixtime(reg_date) as reg_date
FROM
test
ORDER BY
group_no;
์ง๋ผ๋.. ์ญ์. ๋ฐฐ์์ ๋์ด ์๋๋๋ผ ใ
๋ง์ด ์ข์์ก๋ค mysql!