ํฐ์คํ ๋ฆฌ ๋ทฐ
[๋ฐ์ดํฐ๋ถ์์ ์ํ SQL ๋ ์ํผ] 6๊ฐ : ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋ํ ์กฐ์
์คํฑ 2023. 8. 23. 23:31๐ก ์๋ก์ด ์งํ ์ ์ํ๊ธฐ
- ๋ฐ์ดํฐ ์ง๊ณ๋ฅผ ํตํด ์ ์๋ฏธํ ์งํ๋ฅผ ์ ์ํ๊ณ ํ์ฉํ ์ ์์!
- ๋จ์ํ ์ซ์ ๋น๊ต๋ ํฐ ๋ฐ์ดํฐ์๋ง ์ฃผ๋ชฉํ๊ฒ ํ์ง๋ง, ‘๊ฐ์ธ๋ณ’, ‘๋น์จ’ ๊ฐ์ ์งํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ผ๋ณผ ์ ์๋ค
ex) <ํ์ด์ง ๋ทฐ> / <๋ฐฉ๋ฌธ์ ์> : ‘์ฌ์ฉ์ ํ ๋ช ์ด ํ์ด์ง๋ฅผ ๋ช๋ฒ์ด๋ ๋ฐฉ๋ฌธํ๋๊ฐ?’
CTR (ํด๋ฆญ๋น์จ:Click Through Rate)- ์น์ฌ์ดํธ์์๋ ๋ฐฉ๋ฌธํ ์ฌ์ฉ์ ์ ์ค์์ ํน์ ํ ํ๋์ ์ํํ ์ฌ์ฉ์์ ๋น์จ CVR (์ ํ์จ : Conversion Rate ) - ์ ํ์จ์ ์ผ๋ง๋ ๋ง์ ์ฌ๋๋ค์ด ๊ด๊ณ ๋ฅผ ๋ณธ ํ ํ๋์ '์ ํ'ํ๋์ง๋ฅผ ์ธก์
1. ๋ฌธ์์ด ์ฐ๊ฒฐํ๊ธฐ
: CONCAT ํจ์ or || ์ฐ์ฐ์๋ฅผ ์ด์ฉ
SELECT
user_id, CONCAT(pref_name, city_name) AS pref_city, pref_name || city_name AS pref_city2
FROM mst_user_location;
2. ์ฌ๋ฌ ๊ฐ์ ๊ฐ ๋น๊ตํ๊ธฐ
: ํ๋์ ๋ ์ฝ๋์ ํฌํจ๋ ์ฌ๋ฌ ๊ฐ์ ๊ฐ์ ๋น๊ตํ๊ธฐ
๋ถ๊ธฐ๋ณ ๋งค์ถ ์ฆ๊ฐ ํ์ ํ๊ธฐ : 2๊ฐ์ ์ปฌ๋ผ ๋น๊ต
- ๋ฐฉ๋ฒ 1. CASE ๋ฌธ์ ์ด์ฉํด ๊ฐ ์ปฌ๋ผ์ ๋์ ๋น๊ต
- ๋ฐฉ๋ฒ 2. ๊ฐ์ ์ฐจ์ด ๊ตฌํ๋ diff_q2_q1 ๋ณ์ ์ ์ ํ, SIGN ํจ์ ์ด์ฉ โผ๏ธ SIGN ํจ์ → ๋งค๊ฐ๋ณ์ ์์๋ฉด 1, 0์ด๋ฉด 0, ์์๋ฉด -1 ๋ฆฌํด
SELECT
year, q1, q2,
CASE
WHEN q1 < q2 THEN '+'
WHEN q1 = q2 THEN ' '
ELSE '-'
END AS judge_q1_q2
, q2-q1 AS diff_q2_q1
, SIGN(q2 - q1) AS sign_q2_q1
FROM quarterly_sales ORDER BY year;
์ฐ๊ฐ ์ต๋/ ์ต์ 4๋ถ๊ธฐ ๋งค์ถ ์ฐพ๊ธฐ : 3๊ฐ ์ด์์ ์ปฌ๋ผ ๋น๊ต
→ greatest(์ปฌ๋ผ1,์ปฌ๋ผ2,..) ํจ์ or least(์ปฌ๋ผ1,์ปฌ๋ผ2,...)ํจ์
# q1 ~ q4์ ์ต๋/์ต์ ๋งค์ถ ๊ตฌํ๊ธฐ
SELECT
year, greatest(q1,q2,q3,q4) as greatest_sales,
least(q1,q2,q3,q4) as least_sales
FROM quarterly_sales ORDER BY year;
์ฐ๊ฐ ํ๊ท 4๋ถ๊ธฐ ๋งค์ถ ๊ณ์ฐํ๊ธฐ : ์ฌ๋ฌ๊ฐ์ ์ปฌ๋ผ ์ฌ์น์ฐ์ฐ
# q1 ~ q4์ ํ๊ท ๋งค์ถ ๊ตฌํ๊ธฐ
SELECT
year, (q1+q2+q3+q4) / 4 AS average
FROM quarterly_sales ORDER BY year;
โผ๏ธ ์ด๋, NULL๊ฐ ์ฌ์น ์ฐ์ฐ ์ฃผ์! → COALESCE ํจ์ ์ด์ฉํด ๋ณํํ๊ธฐ!
# q1 ~ q4์ ํ๊ท ๋งค์ถ ๊ตฌํ๊ธฐ - NULL ์๋ ๊ฒฝ์ฐ
SELECT
year, (COALESCE(q1,0) + COALESCE(q2,0) + COALESCE(q3,0) + COALESCE(q4,0)) / 4 AS average
FROM quarterly_sales ORDER BY year;
โผ๏ธ NULL์ด ์๋ ์ปฌ๋ผ ์๋ก ๋๋๊ธฐ! →SIGN ํจ์์ COALESCE ํจ์ ์กฐํฉ
# q1 ~ q4์ ํ๊ท ๋งค์ถ ๊ตฌํ๊ธฐ - NULL ์๋ ๊ฒฝ์ฐ
# SIGN(COALESCE(q1,0)) : q1์ด NULL ์๋๋ฉด +1, q1์ด NULL์ด๋ฉด +0
SELECT year,
(COALESCE(q1,0) + COALESCE(q2,0) + COALESCE(q3,0) + COALESCE(q4,0)) / (SIGN(COALESCE(q1,0)) + SIGN(COALESCE(q2,0)) + SIGN(COALESCE(q3,0)) + SIGN(COALESCE(q4,0))) AS average
FROM quarterly_sales ORDER BY year;
3. 2๊ฐ์ ๊ฐ ๋น์จ ๊ณ์ฐํ๊ธฐ
โผ๏ธ ๋น์จ ๊ตฌํ ๋๋, ์ ์๋ก ๋๋๊ฑฐ๋ 0์ผ๋ก ๋๋๋ ๊ฑฐ ์กฐ์ฌํ ๊ฒ!
์ ์ ์๋ฃํ์ ๋ฐ์ดํฐ ๋๋๊ธฐ
- CTR ๊ณ์ฐ : ํด๋ฆญ ์ / ๋
ธ์ถ ์
- ์ ์ ์๋ฃํ์ ๋๋๋ฉด, ๊ณ์ฐ ๊ฒฐ๊ณผ ๋ํ ์ ์ํ์ผ๋ก ๋์ค๋ฏ๋ก 0์ ๋ฐํ
- ๊ฒฐ๊ณผ๋ฅผ ํผ์ผํธ๋ก ๋ํ๋ผ ๋, ctr ์ปฌ๋ผ ๊ฒฐ๊ณผ์ 100์ ๊ณฑํ๊ธฐ → 100.0 ์ ๊ณฑํ๋ฉด ์๋์ผ๋ก ์๋ฃํ๋ณํ ์ผ์ด๋จ!
# cast ํจ์๋ฅผ ์ด์ฉํด double ์๋ฃํ์ผ๋ก ๋ณํํ๊ณ ๊ณ์ฐ # ์ค์๋ฅผ ์์ ์์ ๋๊ณ ๊ณ์ฐํ๋ฉด ์๋ฌต์ ์ผ๋ก ์๋ฃํ ๋ณํ์ด ์ผ์ด๋จ SELECT dt, ad_id, CAST(clicks AS double precision) / impressions AS ctr, 100.0 * clicks / impressions AS ctr_percent FROM advertising_stats WHERE dt = '2017-04-01' ORDER BY dt, ad_id;
0์ผ๋ก ๋๋๋ ๊ฒ ํผํ๊ธฐ
2017-04-02์ impression 0์ด๋ฏ๋ก, 0์ผ๋ก ๋๋ ์ ์์ด์ error ๋ฐ์
→ ๋ฐฉ๋ฒ 1. CASE ์์ ์ด์ฉํด impressions๊ฐ 0์ธ์ง ํ์ธ
→ ๋ฐฉ๋ฒ 2. NULL ์ ํ๋ฅผ ์ฌ์ฉ : NULL์ ํฌํจํ ๋ฐ์ดํฐ์ ์ฐ์ฐ ๊ฒฐ๊ณผ๊ฐ ๋ชจ๋ NULL์ด ๋๋ SQL ์ฑ์ง
NULLIF() ๋ฅผ ์ด์ฉํด ๋ถ๋ชจ๊ฐ 0์ด๋ฉด NULL๋ก ๋ณํํด์ 0์ผ๋ก ๋๋์ง ์๊ฒ ํ๊ธฐ!
# 1. CASE ์์ ์ด์ฉํด 0์ธ์ง ํ์ธ
# 2. NULLIF ์ด์ฉ
SELECT dt, ad_id,
CASE
WHEN impressions > 0 THEN 100.0 * clicks / impressions
END AS ctr_as_percent_by_case
, 100.0 * clicks / NULLIF(impressions,0) AS ctr_as_percent_by_null
FROM advertising_stats
ORDER BY dt, ad_id;
4. ๋ ๊ฐ์ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
‘๊ฑฐ๋ฆฌ’ : ํ๊ท ๊ณผ ์ํ ์ ์๊ฐ ์ผ๋ง๋ ๋จ์ด์ ธ ์๋์ง, ์๋ ๋งค์ถ๊ณผ ์ฌํด ๋งค์ถ์ ์ด๋์ ๋ ์ฐจ์ด๊ฐ ์๋์ง.., ํน์ ์ฌ์ฉ์์ ํน์ ์ฌ์ฉ์์ ๊ตฌ๋งค ๊ฒฝํฅ์ด ์ผ๋ง๋ ๋น์ทํ์ง…
์ซ์ ๋ฐ์ดํฐ์ ์ ๋๊ฐ, ์ ๊ณฑ ํ๊ท ์ ๊ณฑ๊ทผ(RMS) ๊ณ์ฐํ๊ธฐ
๋ฐฉ๋ฒ1. ์ ๋๊ฐ ๊ฑฐ๋ฆฌ → ABS() ํจ์ ์ฌ์ฉ
๋ฐฉ๋ฒ2. ์ ๊ณฑํ๊ท ์ ๊ณฑ๊ทผ ์ด์ฉ → ๋ ๊ฐ์ ์ฐจ์ด ์ ๊ณฑ(POWER() ํจ์) ํ ํ, ์ ๊ณฑ๊ทผ(SQRT()ํจ์) ์์ฐ๊ธฐ!
SELECT abs(x1-x2) AS abs, sqrt(power(x1 - x2, 2)) AS rms
FROM location_1d;
XYํ๋ฉด ์์ ์๋ ๋ ์ ์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ ๊ณ์ฐํ๊ธฐ
์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ → ์ ๊ณฑ ํ๊ท ์ ๊ณฑ๊ทผ ์ด์ฉ!
- PostgreSQL์๋ POINT ์๋ฃํ ์ด๋ผ๋ ์ขํ๋ฅผ ๋ค๋ฃจ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ์์ด์, POINT ์๋ฃํ์ผ๋ก ๋ณํํ ํ ๊ฑฐ๋ฆฌ ์ฐ์ฐ์ ↔ ๋ฅผ ์ด์ฉํด์ ์ ํด๋ฆฌ๋ ๊ฑฐ๋ฆฌ๋ฅผ ๊ตฌํํ ์ ์์!
SELECT
sqrt(power(x1-x2, 2) + power(y1-y2,2)) AS dist,
point(x1,y1) <-> point(x2,y2) AS dist
FROM location_2d;
5. ๋ ์ง,์๊ฐ ๊ณ์ฐํ๊ธฐ
- ๋ ๋ ์ง ๋ฐ์ดํฐ์ ์ฐจ์ด ๊ตฌํ๊ฑฐ๋, 1์๊ฐ ํ ์๊ฐ ๊ตฌํ๋ ๋ฐฉ๋ฒ
๋ฏธ๋ ๋๋ ๊ณผ๊ฑฐ์ ๋ ์ง/์๊ฐ์ ๊ณ์ฐ
- ํ์ ๋ฑ๋ก ์๊ฐ 1์๊ฐ ํ์ 30๋ถ ์ ์ ์๊ฐ, ๋ฑ๋ก์ผ์ ๋ค์๋ ๊ณผ 1๋ฌ ์ ์ ๋ ์ง๋ฅผ ๊ณ์ฐ
- ์ ์์ ๋ง์ ๊ณผ ๋บ์ ์ฌ์ฉ
- postgresql์ ๊ฒฝ์ฐ interval ์๋ฃํ ์ด์ฉ โผ๏ธ interval ํ์ ์ year, month, day, hour, minute, second ๋ฑ์ ๋จ์์ ๊ฒฐํฉํ์ฌ ๋ ์ง/์๊ฐ ์ฐ์ฐ์ด ๊ฐ๋ฅ
SELECT user_id, register_stamp::timestamp as register_stamp,
register_stamp::timestamp + '1 hour'::interval AS after_1_hour,
register_stamp::timestamp - '30 minutes'::interval AS before_30_minutes,
register_stamp::date as register_date,
(register_stamp::date + '1 day'::interval)::date as after_1_day,
(register_stamp::date - '1 month'::interval)::date as before_1_month
FROM mst_users_with_dates;
๋ ์ง ๋ฐ์ดํฐ๋ค์ ์ฐจ์ด ๊ณ์ฐํ๊ธฐ
๋ ๋ ์ง ๋ฐ์ดํฐ ์ด์ฉํด ๋ ์ง์ ์ฐจ์ด ๊ณ์ฐํ๊ธฐ
- ํ์ ๋ฑ๋ก์ผ๊ณผ ํ์ฌ ๋ ์ง์ ์ฐจ์ด
# PostgreSQL์ ๊ฒฝ์ฐ ๋ ์ง ์๋ฃํ ๋ผ๋ฆฌ ๋บ ์ ์์
SELECT user_id,
CURRENT_DATE AS today, register_stamp::Date AS register_date,
CURRENT_DATE - register_stamp::date AS diff_days
FROM mst_users_with_dates;
์ฌ์ฉ์์ ์๋ ์์ผ๋ก ๋์ด ๊ณ์ฐํ๊ธฐ
๋ ์ง ์ฐจ์ด ๊ตฌํ๋ ๊ฒ๋ณด๋ค ๋์ด ๊ณ์ฐ์ ์กฐ๊ธ ๋ณต์ก → ๋จ์ํ๊ฒ 365์ผ๋ก ๋๋๋ฉด ๋๋ ๊ฒ ์๋! ์ค๋ ๋ ๊ณ ๋ คํด์ผ ํจ!
๋ฐฉ๋ฒ1. PostgreSQL์๋ ๋์ด ๊ณ์ฐ ์ ์ฉํจ์๊ฐ ๊ตฌํ ๋์ด ์์! AGE() ํจ์
# EXTRACTํจ์๋ก ์ฐ๋ ๋ถ๋ถ๋ง์ ์ถ์ถ
SELECT user_id,
CURRENT_DATE AS today, register_stamp::date AS register_date,
birth_date::date AS birth_date,
EXTRACT(YEAR FROM age(birth_date::date)) AS current_age,
EXTRACT(YEAR FROM age(register_stamp::date, birth_date::date)) AS register_age
FROM mst_users_with_dates;
cf) EXTRACT() ์ ์จ์ฃผ๋ฉด, interval ์๋ฃํ์ ๋ ์ง ๋จ์ ์ถ๋ ฅ๋จ → EXTRACT๋ก ์ฐ๋๋ง ์ถ์ถ!
๋ฐฉ๋ฒ2. ๋ ์ง๋ฅผ ์ ์๋ก ํํํด์ ๋นผ์ค ํ, 10,000์ผ๋ก ๋๋ ์ฃผ๊ธฐ
- ๋ ์ง๋ฅผ ๊ณ ์ ์๋ฆฌ ์์ ์ ์๋ก ํํ!
# 2000๋
2์ 29์ผ์ธ ์ฌ๋ 2016๋
2์ 28์ผ ์์ ์ ๋์ด ๊ณ์ฐ
SELECT floor((20160228 - 20000229) / 10000) AS age;
๋ฐฉ๋ฒ3. ๋ฌธ์์ด๋ก ๊ณ์ฐํ๊ธฐ
- ๋ฌธ์์ด์์ ํ์ดํ์ ์ ๊ฑฐํ๊ณ , ์ ์๋ก ์บ์คํธ!
SELECT user_id,
substring(register_stamp,1,10) AS register_date, birth_date,
-- ๋ฑ๋ก ์์ ์ ๋์ด ๊ณ์ฐ
floor((CAST(replace(substring(register_stamp, 1, 10),'-','') AS integer) -
CAST(replace(birth_date, '-','') AS integer)
)/ 10000) AS register_age,
-- ํ์ฌ ์์ ์ ๋์ด ๊ณ์ฐ
floor((CAST(replace(CAST(CURRENT_DATE AS text),'-','') AS integer) -
CAST(replace(birth_date, '-','') AS integer)
)/ 10000) AS current_age
FROM mst_users_with_dates;
6. IP ์ฃผ์ ์๋ฃํ ํ์ฉํ๊ธฐ
- IP ์ฃผ์ ๋ค๋ฃจ๊ธฐ ์ํ inet ์๋ฃํ ๊ตฌํ๋์ด ์์!
- inet ์๋ฃํ์ ํตํด IP ์ฃผ์ ์ฝ๊ฒ ๋น๊ต ๊ฐ๋ฅ ! <, >
SELECT
CAST('127.0.0.1' AS inet) < CAST('127.0.0.2' AS inet) AS lt,
CAST('127.0.0.1' AS inet) > CAST('127.0.0.2' AS inet) AS gt;
→ ์กฐ๊ฑด์ ํด๋นํ ๊ฒฝ์ฐ t, ์๋ ๊ฒฝ์ฐ f ๋ฆฌํด
- address/y ํํ์ ๋คํธ์ํฌ ๋ฒ์์ IP ์ฃผ์ ํฌํจ ์ฌ๋ถ ํ์ ๊ฐ๋ฅ<< ๋๋ >> ์ฐ์ฐ์ ์ฌ์ฉ
SELECT
CAST('127.0.0.1' AS inet) << CAST('127.0.0.0/8' AS inet) AS is_contained;
์ ์ ๋๋ ๋ฌธ์์ด๋ก IP ๋ค๋ฃจ๊ธฐ
- inet ์๋ฃํ์ฒ๋ผ ์๋ ๊ฒฝ์ฐ! → ์ ์ or ๋ฌธ์์ด๋ก IP ๋ค๋ฃจ๊ธฐ
- split_part() ํจ์๋ฅผ ์ด์ฉํด ๋ฌธ์์ด ๋ถํดํ ํ, ์ ์ํ์ผ๋ก ๋ฐ๊พธ๊ธฐ!
SELECT
ip
, CAST(split_part(ip, '.', 1) AS integer) AS ip_part_1
, CAST(split_part(ip, '.', 2) AS integer) AS ip_part_2
, CAST(split_part(ip, '.', 3) AS integer) AS ip_part_3
, CAST(split_part(ip, '.', 4) AS integer) AS ip_part_4
FROM
(SELECT CAST('192.168.0.1' AS text) AS ip) AS t;
- ์ถ์ถํ 4๊ฐ์ 10์ง์ ๋ถ๋ถ์ 2^24, 2^16, 2^8, 2^0์ผ๋ก ๊ณฑํ๊ณ ๋ํ๋ฉด ์ ์ํ ์๋ฃํ ํ๊ธฐ๋ก ๋ณํ → ๋์ ๋น๊ต ๋ฐ ๋ฒ์ ํ์ ์ด ๊ฐ๋ฅ
SELECT
ip
, CAST(split_part(ip, '.', 1) AS integer) * 2^24
+ CAST(split_part(ip, '.', 2) AS integer) * 2^16
+ CAST(split_part(ip, '.', 3) AS integer) * 2^8
+ CAST(split_part(ip, '.', 4) AS integer) * 2^0
AS ip_integer FROM (SELECT CAST('192.168.0.1' AS text) AS ip) AS t;
- IP ์ฃผ์๋ฅผ 0์ผ๋ก ๋ฉ์ฐ๊ธฐ→ lpadํจ์๋ฅผ ์ด์ฉ! : ์ง์ ํ ๋ฌธ์ ์๊ฐ ๋๊ฒ ๋ฌธ์์ด์ ์ผ์ชฝ์ ๋ฉ์!
- ๋ฐ์ดํฐ ์ง๊ณ๋ฅผ ํตํด ์ ์๋ฏธํ ์งํ๋ฅผ ์ ์ํ๊ณ ํ์ฉํ ์ ์์!
- ๋จ์ํ ์ซ์ ๋น๊ต๋ ํฐ ๋ฐ์ดํฐ์๋ง ์ฃผ๋ชฉํ๊ฒ ํ์ง๋ง, ‘๊ฐ์ธ๋ณ’, ‘๋น์จ’ ๊ฐ์ ์งํ๋ฅผ ์ฌ์ฉํ๋ฉด ๋ค์ํ ๊ด์ ์์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ผ๋ณผ ์ ์๋ค
SELECT
ip
, lpad(split_part(ip, '.', 1), 3, '0')
|| lpad(split_part(ip, '.', 2), 3, '0')
|| lpad(split_part(ip, '.', 3), 3, '0')
|| lpad(split_part(ip, '.', 4), 3, '0')
AS ip_padding FROM (SELECT CAST('192.168.0.1' AS text) AS ip) AS t;
'SQL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[SQL] Python๊ณผ PostgreSQL ์ฐ๊ฒฐํ๊ธฐ / psycopg (0) | 2024.07.09 |
---|---|
[๋ฐ์ดํฐ ๋ถ์์ ์ํ SQL ๋ ์ํผ] 7์ฅ. ํ๋์ ํ ์ด๋ธ์ ๋ํ ์กฐ์ (0) | 2023.09.10 |
[Programmers] NULL ์ ๋ฆฌ (0) | 2023.08.16 |
[๋ฐ์ดํฐ๋ถ์์ ์ํ SQL ๋ ์ํผ] 5๊ฐ : ํ๋์ ๊ฐ ์กฐ์ํ๊ธฐ (0) | 2023.08.11 |
[Programmers] Lv4. ์ ์ ์๊ฐ ๊ตฌํ๊ธฐ(2) (0) | 2023.08.11 |
- Total
- Today
- Yesterday
- ์ฐ๊ด๊ท์น๋ถ์
- rag ๋ค์ค๋ฌธ์ ํ์ฉ
- SELECT๋ฌธ ์ ์๋ธ์ฟผ๋ฆฌ
- SQL๋ ์ํผ
- WHERE๋ฌธ ์ง๊ณํจ์
- ์ถ์ฒ์์คํ
- pointwise reranker
- ํ์ด๋ธ๋ฆฌ๋ ํํฐ๋ง
- cold-start
- ์จ๊ฒจ์ง์กฐ๊ฑด
- ์ฌ๋ฌ๊ฐ ๊ฐ์ ๋ํ ์กฐ์
- ๋ค์ค GROUP BY
- SET๋ฌธ
- reranker
- SQL
- NULL์ธ ์ด ๋ง๋ค์ด์ฃผ๊ธฐ
- groupby ๋ค์ค
- ORDER BY LIMIT
- SASRec
- treer๊ตฌ์กฐ
- ์๊ณ ๋ฆฌ์ฆ
- WHERE์ ์๋ธ์ฟผ๋ฆฌ
- Lagrange Multipler
- reranker ์๋ ๊ฐ์
- ์๋ธ์ฟผ๋ฆฌ
- NULL AS
- ์ด์ฝํ
- llm reranker
- ๊ณ ์ ์ ์ถ์ฒ ์๊ณ ๋ฆฌ์ฆ
- ํ๋์ ํ ์ด๋ธ์ ๋ํ ์กฐ์
์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |