one to many, Query tip

호모루덴스·2020년 3월 12일
0

T_TS_CLS (1)

T_TS_STD (N)

example. 반 별로 카운트 NULL -> 0

select T1.cls, count(s.cls)
from T_TS_CLS T1
         LEFT OUTER JOIN T_TS_STD T2
                         ON T1.cls = T2.cls
group by T1.cls
;
/**
먼저 합치고 정렬
*/

LEFT OUTER JOIN만 했을 때 모습 이것을 T1.cls로 grouping하면 위처럼

SELECT T1.*, IFNULL(T2.cnt, 0) AS cnt
FROM T_TS_CLS T1
         LEFT OUTER JOIN (
    SELECT cls
         , COUNT(*) AS cnt
    FROM T_TS_STD
    GROUP BY cls
) T2 ON T1.cls = T2.cls;
/**
many를 정렬 후 cnt도 구해놓고 one으로 JOIN
*/
// 위에서 nested SELECT
SELECT cls
     , COUNT(*) AS cnt
FROM T_TS_STD
GROUP BY cls;
/**
Separation of Concerns
*/


후자가 관심을 분리 해서 직관적이고 깔끔하고 확장성있는 SQL이다

RESULT

profile
hola 공무원 때려친 코린이입니다

0개의 댓글