WITH TAB AS ( SELECT 1 AS A_IDX, 1 AS B_IDX, 1 AS SN, 3 AS CO FROM DUAL UNION ALL SELECT 1 AS A_IDX, 1 AS B_IDX, 2 AS SN, 3 AS CO FROM DUAL UNION ALL SELECT 1 AS A_IDX, 2 AS B_IDX, 1 AS SN, 10 AS CO FROM DUAL ), TAB_IDX as ( SELECT 1 AS A_IDX FROM DUAL ) select (select SUM(A.CO) from (select MIN(CO) as CO from TAB where A_IDX = A.IDX group by B_IDX)A) as SU from TAB_IDX A WITH TAB AS ( SELECT 1 AS A_IDX, 1 AS B_IDX, 1 AS SN, 3 AS CO FROM DUAL UNION ALL SELECT 1 AS A_IDX, 1 AS B_IDX, 2 AS SN, 3 AS CO FROM DUAL UNION ALL SELECT 1 AS A_IDX, 2 AS B_IDX, 1 AS SN, 10 AS CO FROM DUAL ), TAB_IDX AS ( SELECT 1 AS A_IDX FROM DUAL ) SELECT (SELECT SUM(A.CO) FROM (SELECT MIN(CO) AS CO FROM TAB WHERE A_IDX = A.IDX GROUP BY B_IDX)A) AS SU FROM TAB_IDX A;
해당 쿼리를 셀렉트절에 서브로 노출 사용할 생각인데...
B_IDX 그룹핑 된 기준으로 CO 점수를 합산해서 노출시키고 싶습니다.
SUM = 13값을 노출시키려면 어떻게 해야할지 여쭤봅니다.
현재는 16이 나오고 있습니다.
1.b_idx가 같으면 CO도 동일값입니다 ! 다른값은 존재하지 않습니다. 해당 idx중복값에는 TAB_IDX.SN값만 다르게 구성되어있습니다. sn의 값이 하나라도 존재하면 그룹핑 하고싶어서요!
2.아 죄송합니다 말씀주신사항이 맞습니다. idx값이라 전부 숫자형입니다 !추후에 co의 sum()값을 최종 도출하고자 합니다 ! 더미 데이터 변경했습니다.
3. mariaDB 사용중이며, 기존테이블들의 사용될 함축된 데이터만 끌어서 더미테이블로 만들어봤습니다.마리아db와 mysql 사용문이 비슷하다고 하여 이렇게 적었습니다..ㅎ
4. 전체적인 구조를 바꾸지 않고, 기존 쿼리 구조를 바꾸지 않은상태에서 변경하고자 했습니다..ㅜ
sn 은 어떤 항목인가요?
순번 같은데? 1 이 항상 존재한다면? 이를 이용하면 간단할 것 같은데요?
WHERE sn = 1
-- sn = 1 조건을 이용하는 방안 -- WITH tab AS ( SELECT 1 a_idx, 1 b_idx, 1 sn, 3 co UNION ALL SELECT 1, 1, 2, 3 UNION ALL SELECT 1, 2, 1, 10 ) , tab_idx AS ( SELECT 1 a_idx ) SELECT a.a_idx , SUM(b.co) co FROM tab_idx a INNER JOIN tab b ON a.a_idx = b.a_idx WHERE b.sn = 1 GROUP BY a.a_idx ;
-- sn = 1 조건을 이용할 수 없다면 -- WITH tab AS ( SELECT 1 a_idx, 1 b_idx, 1 sn, 3 co UNION ALL SELECT 1, 1, 2, 3 UNION ALL SELECT 1, 2, 1, 10 ) , tab_idx AS ( SELECT 1 a_idx ) SELECT a_idx , SUM(co) co FROM (SELECT DISTINCT b.a_idx , b.b_idx , b.co FROM tab_idx a INNER JOIN tab b ON a.a_idx = b.a_idx ) c GROUP BY a_idx ;
WITH tab AS ( SELECT 1 a_idx, 1 b_idx, 1 sn, 3 co UNION ALL SELECT 1, 1, 2, 3 UNION ALL SELECT 1, 2, 1, 10 ) , tab_idx AS ( SELECT 1 a_idx ) -- 스칼라서브쿼리로 풀고 싶을 때 -- SELECT a.a_idx , (-- 1. sn = 1 인 행이 항상 1개가 존재한다고 가정하면 -- SELECT SUM(co) FROM tab WHERE a_idx = a.a_idx AND sn = 1 ) co_1 , (-- 2. b_idx 가 다르면 co 도 다르다 라고 가정하면 -- SELECT SUM(DISTINCT co) FROM tab WHERE a_idx = a.a_idx ) co_2 , (-- 3. 1,2번 상황을 가정할 수 없다면 -- SELECT SUM(b.co) FROM tab b LEFT OUTER JOIN tab c ON b.a_idx = c.a_idx AND b.b_idx = c.b_idx AND b.sn > c.sn WHERE b.a_idx = a.a_idx AND c.a_idx IS NULL ) co_3 FROM tab_idx a ;