회고/TIL(매일)

TIL 161일차: group_concat 함수

0sean 2024. 6. 13. 17:53

 

✏️도전한 점


1. 아티클 스터디 및 요약

2. 알쿼리즘 스터디 후 공부

 

01 궁금한 점: 이게 왜 되는가?


1. 팀원 코드

CASE WHEN GROUP_CONCAT(S.NAME) LIKE '%Python%' AND (SUM(S.CATEGORY = 'Front End') > 0) THEN 'A'

2. 나의 코드

CASE WHEN (GROUP_CONCAT(NAME) LIKE '%Python%') AND (MAX(CATEGORY) = 'Front End') THEN 'A'

 

팀원코드 전체보기

더보기
WITH G AS (
    SELECT
        CASE WHEN GROUP_CONCAT(S.NAME) LIKE '%Python%' AND (SUM(S.CATEGORY = 'Front End') > 0) THEN 'A'
        WHEN GROUP_CONCAT(S.NAME) LIKE '%C#%' THEN 'B'
        WHEN SUM(S.CATEGORY = 'Front End') > 0 AND GROUP_CONCAT(S.NAME) NOT LIKE '%Python%' THEN 'C'
        END GRADE,
        ID,
        EMAIL
    FROM
        DEVELOPERS D JOIN SKILLCODES S ON D.SKILL_CODE & S.CODE = S.CODE
    GROUP BY
        D.ID, D.EMAIL
)
SELECT GRADE, ID, EMAIL
FROM G
WHERE GRADE IS NOT NULL
ORDER BY GRADE, ID

 

이전에 정리해 둔 내용은 아래와 같다.

🔎SK.category는 조인된 테이블의 컬럼이다. 하지만 그룹화(GROUP BY)가 적용된 상황에서는 단일 값이 아니라 여러 행의 값을 포함할 수 있다. 이 경우 특정 값을 비교하려면 집계 함수(MAX, MIN 등)를 사용해야 한다.

 

- 단일 값이 아니기 때문에 집계 함수를 사용해야 한다고 했다. GROUP_CONCAT 함수는 그룹화된 각 개발자에 대해 NAME 필드의 값을 하나의 문자열로 합치는 기능을 하지만 CATEGORY는 아직 여러개가 각각 따로 있을 거라고 생각했다. (추측) 그래서 MAX함수를 통해 존재 유무를 밝혔다.

 

- 근데 팀원의 코드는 조인된 테이블의 컬럼과 불리언 식을 그대로 가져갔다. 대신 SUM이라는 집계 함수와 등호를 이용해서 존재의 유무를 밝혔다. 아래의 조건은 유지되는 것이었다.

💡집계 함수(SUM)가 그룹화된 행들에 대해 조건을 평가하는 데 필수이다. SQL 쿼리에서 GROUP BY절을 사용하여 데이터를 그룹화하면, 개별 행에 대해 조건을 평가할 수 없다. 반드시 각 그룹에 대해 집계된 결과를 사용해야 한다.

 

 

인사이트💡

 

1. GROUP_CONCAT(NAME) 함수는 NAME 열의 값을 하나의 문자열로 결합하는 것이고, GROUP BY된 다른 열들은 그룹화 기준으로 유지된다. 예시를 들자면 아래와 같다.

 

 

2. S.CATEGORY = 'Front End'라는 코드 자체가 불리언 식으로 True일 때는 1을 반환하고, False일 때는 0을 반환한다. 따라서 SUM(S.CATEGORY = 'Front End') > 0은 'Front End' 스킬이 하나라도 있는 경우를 의미한다.

 

02 아티클 스터디 및 요약


 

🔎아티클 스터디: ③ A/A 테스트와 무작위화

1. 오늘의 아티클(주제) 신뢰할 수 있는 A/B 테스트 만들기: ③ A/A 테스트와 무작위화 | 요즘IT앞서 A/A 테스트의 목적과 필요성, 실험 전 편향에 대해 다루었습니다. 이번에는 이러한 실험 전 편향

specialda.tistory.com

- 결국 우리가 A/B 테스트를 중요시하는 이유는 온전히 우리의 통제를 통해 신뢰할 수 있는 데이터를 만들 수 있나 없나에 있다고 생각한다. 온전한 통제가 가능한지 여부를 A/A 테스트를 통해 확인하고 그를 위해 무작위화에 대해 배웠다. 해시 알고리즘 개념에 대해서도 함께 얻어갈 수 있던 유익한 시간이 됐다.