database.sarang.net
UserID
Passwd
Database
DBMS
MySQL
PostgreSQL
Firebird
ㆍOracle
Informix
Sybase
MS-SQL
DB2
Cache
CUBRID
LDAP
ALTIBASE
Tibero
DB 문서들
스터디
Community
공지사항
자유게시판
구인|구직
DSN 갤러리
도움주신분들
Admin
운영게시판
최근게시물
Oracle Q&A 39242 게시물 읽기
No. 39242
고수님들의 주옥같은 도움 절실히 필요합니다.도와주세요...ㅠㅠ
작성자
일쌍다반사(jshlove7)
작성일
2012-01-18 17:52
조회수
4,512

안녕하십니까?

고수님들의 도움이 절실히 필요해서 이렇게 글을 올리게 되었습니다.

제발 도와주십시요..ㅠㅠ....

내용은 아래와 같습니다.....ㅠㅠ

REGION COUNTRY PRODUCT BRAND_TOP1 TOP1_CNT BRAND_TOP2 TOP2_CNT BRAND_TOP3 TOP3_CNT
ASIA INDONESIA REFRIGERATOR SAMSUNG 1 0 0
ASIA INDONESIA REFRIGERATOR SHARP 1 0 0
ASIA INDONESIA REFRIGERATOR MITSHUBUSHI 1 0 0
ASIA INDONESIA REFRIGERATOR LG 5 0 0
ASIA INDONESIA REFRIGERATOR 0 SAMSUNG 4 0
ASIA INDONESIA REFRIGERATOR 0 MIDEA 1 0
ASIA INDONESIA REFRIGERATOR 0 SANYO 1 0
ASIA INDONESIA REFRIGERATOR 0 MODENA 1 0
ASIA INDONESIA REFRIGERATOR 0 TOSHIBA 1 0
ASIA INDONESIA REFRIGERATOR 0 0 MIDEA 3
ASIA INDONESIA REFRIGERATOR 0 0 SANYO 1
ASIA INDONESIA REFRIGERATOR 0 0 HITACHI 1
ASIA INDONESIA REFRIGERATOR 0 0 SANKEN 3

위와 같은 데이타 까지 추출 한 후, 빨간 글씨 부분을 보시면 각 BRAND_TOP1 , BRAND_TOP2 , BRAND_TOP3 의 최대값과 해당 브랜드명을 가지고

오고 싶습니다...

즉 결과는

REGION COUNTRY PRODUCT BRAND_TOP1 TOP1_CNT BRAND_TOP2 TOP2_CNT BRAND_TOP3 TOP3_CNT
                 
ASIA INDONESIA REFRIGERATOR LG 5 SAMSUNG 4 MIDEA 3
ASIA INDONESIA REFRIGERATOR LG 5 SAMSUNG 4 SANKEN 3

요로코롬 나오게 하고 싶습니다.

 

고수님들의 주옥같은 SQL 부탁드립니다...ㅠㅠ....

 

이 글에 대한 댓글이 총 5건 있습니다.

위의 데이터를 추출한 SQL을 보여주세요.

마농(manon94)님이 2012-01-19 08:58에 작성한 댓글입니다.

허접한 쿼리입니다....올려 봅니다......^^;

SELECT
   A.REGION,A.COUNTRY,A.PRODUCT,
   A.BRAND_TOP1,A.TOP1_CNT,
   A.BRAND_TOP2,A.TOP2_CNT,
   A.BRAND_TOP3,A.TOP3_CNT
   FROM
(
  SELECT
     REGION, COUNTRY, PRODUCT,
   BRAND_TOP1,
   '' AS BRAND_TOP2,
   '' AS BRAND_TOP3, 
     COUNT(BRAND_TOP1) AS TOP1_CNT,
   0 AS TOP2_CNT,
   0 AS TOP3_CNT
 FROM TB_IN_SI_INFO  
  GROUP BY REGION, COUNTRY, PRODUCT,BRAND_TOP1
  UNION ALL
  SELECT
     REGION, COUNTRY, PRODUCT,
   '' AS BRAND_TOP1,
   BRAND_TOP2,
   '' AS BRAND_TOP3,
   0 AS TOP1_CNT,
     COUNT(BRAND_TOP2) AS TOP2_CNT,
   0 AS TOP3_CNT
 FROM TB_IN_SI_INFO  
  GROUP BY REGION, COUNTRY, PRODUCT,BRAND_TOP2
  UNION ALL
  SELECT
     REGION, COUNTRY, PRODUCT,
   '' AS BRAND_TOP1,
   '' AS BRAND_TOP2,
   BRAND_TOP3,
   0 AS TOP1_CNT,
   0 AS TOP2_CNT,
     COUNT(BRAND_TOP3) AS TOP3_CNT
 FROM TB_IN_SI_INFO  
  GROUP BY REGION, COUNTRY, PRODUCT,BRAND_TOP3
) A 

일쌍다반사(jshlove7)님이 2012-01-19 10:05에 작성한 댓글입니다.

WITH tb_in_si_info AS
(
SELECT 'ASIA' region, 'INDONESIA' country, 'REFRIGERATOR' product, 'SAMSUNG' brand_top1, 'MIDEA' brand_top2, 'SANYO' brand_top3 FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'SHARP', 'MODENA', 'MIDEA' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'MITSHUBUSHI', 'SANYO', 'MIDEA' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'LG', 'SAMSUNG', 'MIDEA' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'LG', 'SAMSUNG', 'HITACHI' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'LG', 'SAMSUNG', 'SANKEN' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'LG', 'SAMSUNG', 'SANKEN' FROM dual
UNION ALL SELECT 'ASIA', 'INDONESIA', 'REFRIGERATOR', 'LG', 'TOSHIBA', 'SANKEN' FROM dual

)
SELECT region, country, product
     , rn
     , MAX(brand_top1) brand_top1
     , MAX(top1_cnt  ) top1_cnt
     , MAX(brand_top2) brand_top2
     , MAX(top2_cnt  ) top2_cnt
     , MAX(brand_top3) brand_top3
     , MAX(top3_cnt  ) top3_cnt
  FROM (
        SELECT region, country, product
             , brand_top1
             , brand_top2
             , brand_top3
             , COUNT(*) cnt
             , NVL2(brand_top1, COUNT(*), null) top1_cnt
             , NVL2(brand_top2, COUNT(*), null) top2_cnt
             , NVL2(brand_top3, COUNT(*), null) top3_cnt
             , RANK() OVER(
               PARTITION BY region, country, product
               , GROUPING_ID(brand_top1, brand_top2, brand_top3)
               ORDER BY COUNT(*) DESC) rk
             , ROW_NUMBER() OVER(
               PARTITION BY region, country, product
               , GROUPING_ID(brand_top1, brand_top2, brand_top3)
               ORDER BY COUNT(*) DESC) rn
          FROM tb_in_si_info
         GROUP BY region, country, product
             , GROUPING SETS ((brand_top1), (brand_top2), (brand_top3))
        )
 WHERE rk = 1
 GROUP BY region, country, product, rn
 ORDER BY region, country, product, rn
;

마농(manon94)님이 2012-01-19 11:22에 작성한 댓글입니다.
이 댓글은 2012-01-19 13:46에 마지막으로 수정되었습니다.

정말이지...마농 님의 친절한 답변 항상 감탄하고 있습니다...

정말 감사합니다...조금 있으면 구정인데...새해 복 많이 받으시고, 항상 좋은 일만 있기를 바라겠습니다.

^^;;

일쌍다반사(jshlove7)님이 2012-01-19 12:18에 작성한 댓글입니다.

한가지 우려되는 것이 있는데...

1등을 많이 한 기업을 찾는 것은 의미가 있을지 몰라도

2등이나 3등을 많이 한 기업을 찾는것이 의미가 있을런지요?

만약 1등을 네번한 기업과 세번한 기업이 있을 때

1등을 세번한 기업은 조회시 제외되겠지요.

반면에 3등을 세번한 기업은 조회가 되고요.

1등 세번한 기업이 더 좋은 기업임에도 불구하고 조회시 누락이 되어

잘못하면 3등 세번한 기업보다 못한 것으로 잘못 판단할 소지가 있습니다.

마농(manon94)님이 2012-01-20 11:00에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39245쿼리 도움 부탁드립니다
초보
2012-01-19
3643
39244[프로시져] 어떻게 만들어야 하나요.ㅠㅠ 프로시져 어렵네요.ㅠㅠ [1]
나진산
2012-01-18
4118
39243HSODBC로 여러 MS-SQL Server 연동이 가능한가요?
허진우
2012-01-18
3212
39242고수님들의 주옥같은 도움 절실히 필요합니다.도와주세요...ㅠㅠ [5]
일쌍다반사
2012-01-18
4512
39241procedure, package 사용용도 [1]
나재호
2012-01-18
3657
39240쿼리 질문입니다 help~ [2]
물고기
2012-01-17
3568
39239IN 안의 조건 컨트롤 문의드립니다. [4]
2012-01-17
3859
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.017초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다