안녕하십니까 DB를 이용하여 통계를 내려고하는 일반 직장인입니다.
질문에 앞서 내용을 검색해봤는데 찾지를 못하겠어서 결국 질문을 드리게 되었습니다.
첨부 그림과 같이 DB에서 쿼리를 보내면 제품명, 분류 코드로 구분이 됩니다.
1226_FA01 2
1226_FB03 2
1226_FC08 2
1226_FD03 6
1226_FE02 6
1226_FF02 6
1226_FH04 2
1226_FG03 4
제품명은 생산날짜_영문순서 숫자(제품 개수)입니다.
1226_FB03 을 예로 들면 분류 코드 2인 제품 3 종류가 1226_FB03 이라는 제품명을 부여받습니다.
분류 코드는 1~20까지 번호가 있습니다. (중간 중간 빠지는 번호도 있습니다!)
분류 코드로 구분을 한 후에 맨 뒤의 숫자를 모두 더하는 방식으로 집계를 할려면 어떻게 해야되는지
도움을 부탁드립니다.
각 년도마다 집계를 해야하는데 위에 적은 내용을 기준으로 아래와 비슷한 결과물이 나오게
하고 싶습니다.
년도 분류코드 카운트(분류코드) 제품뒤에 숫자 합산
22 2 4 16
이 글을 읽으시는 분들께 너무 결과만을 바라보면서 답변을 구하는 점에 대해서 사과의 말씀을 드립니다.
업무가 아예 다르다보니 질문을 어떤 방향으로 해야할지도 잘 모르겠습니다.
(사실 전산 DB관련 담당자 퇴사 후 방치되고 있습니다.)
어떤 식으로 조회를 해야될지라도 알려주신다면 더 찾아보면서 결과물이 나오도록 노력하겠습니다.
새해 복 많이 받으세요!!
WITH t AS ( SELECT '2022' yy, '1226_FA01' nm, 2 cd FROM dual UNION ALL SELECT '2022', '1226_FB03', 2 FROM dual UNION ALL SELECT '2022', '1226_FC08', 2 FROM dual UNION ALL SELECT '2022', '1226_FD03', 6 FROM dual UNION ALL SELECT '2022', '1226_FE02', 6 FROM dual UNION ALL SELECT '2022', '1226_FF02', 6 FROM dual UNION ALL SELECT '2022', '1226_FH04', 2 FROM dual UNION ALL SELECT '2022', '1226_FG03', 4 FROM dual ) SELECT yy , cd , COUNT(*) cnt_1 , SUM(SUBSTR(nm, 8)) cnt_2 FROM t WHERE yy = '2022' GROUP BY yy, cd ORDER BY yy, cd ;
안녕하세요! 마농님
답변 정말 감사드립니다.
with t as (select year(a.Time) as yy, a.Name as nm, a.Num as cd from Panel as a union all select year(b.Time), b.Name, b.Num from Panel as b) select yy , cd , COUNT(*) as cnt_1 , SUM(convert(integer,right(nm, 2))) as cnt_2 from t where yy = '2022' group by yy, cd order by yy, cd
알려주신 대로 그대로 복붙했더니 dual 이랑 substr 을 사용할 수가 없다고 해서 알려주신 내용을 토대로
변경을 해봤습니다.
몇 가지 추가 질문을 드리는데.. 혹시나 시간이 되신다면 알려주시면 감사드리겠습니다.!
with t as () 이거는 하나로 묶는 개념인가요?
(유니온과 위드를 검색해봤는데 잘 이해가 되지 않습니다.. ㅜㅜ)
substr 이 안되서 검색하다보니 제품명 뒤에 숫자가 01, 12, 23 이런 식으로 2자리라서 right 로 했습니다.
(무슨 varchar 에러가 나길래 그대로 컨버트를 했더니 됐습니다!)
이렇게 고쳐서 나온 결과 값이 신뢰 할수 있는지 걱정반, 다른 부분에도 적용할수 있을 것 같아서 설렘반이긴합니다.
고칠 부분이나 잘못된 부분이 있는지 지적해주시면 감사드리겠습니다.
정말 고맙습니다!
앗 지금 조회를 하나만 해보니깐 수치가 2배로 나옵니다.
union 부분을 삭제를 하면 될까요?
1. WITH 문은
- 올려주신 샘플 데이터를 만들기 위함 입니다.
- 직접 쿼리를 돌려보기 위한 용도로 사용한 것입니다.
2. DBMS 를 명시하지 않아서
- 오라클 기준으로 작성했습니다.
- 질문 시 DBMS 종류를 명시해 주셔야 합니다.
SELECT YEAR(Time) yy , Num , COUNT(*) cnt_1 , SUM(CONVERT(INTEGER, RIGHT(Name, 2))) cnt_2 FROM Panel WHERE YEAR(Time) = 2022 GROUP BY YEAR(Time), Num ORDER BY yy, Num ;