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 39584 게시물 읽기
No. 39584
카운트를 해야하는데 쿼리로 가능할까요??
작성자
이용헌(dldydgjs10)
작성일
2012-08-08 16:47
조회수
5,926

안녕하세요 ~

 

table_A

rownum      과일     채소

1                사과     당근

2                사과     양파

3                딸기     당근

4                사과     양파

5                수박     당근

 

과일은     사과 3개, 딸기 1개, 수박 1개

야채는     당근 3개, 양파 2개  이렇게 있는데요

 

목표는 과일이 5개중 사과가 3개라서 60%

            채소는 5개중  당근이 3개라서 60%

 

가장많이 들어간것의 퍼센테이지를 구하는것인데

쿼리로 가능할까요?

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

WITH table_A AS
(
SELECT '사과' 과일, '당근' 채소 FROM dual
UNION ALL SELECT '사과', '양파' FROM dual
UNION ALL SELECT '딸기', '당근' FROM dual
UNION ALL SELECT '사과', '양파' FROM dual
UNION ALL SELECT '수박', '당근' FROM dual
)
SELECT 구분, 품목
     , 갯수, 비율
  FROM (
        SELECT NVL2(과일, '과일', '채소') 구분
             , NVL(과일, 채소) 품목
             , COUNT(*) 갯수
             , RATIO_TO_REPORT(COUNT(*))
               OVER(PARTITION BY GROUPING(과일)) * 100 비율
             , RANK()
               OVER(PARTITION BY GROUPING(과일)
               ORDER BY COUNT(*) DESC) rk
          FROM table_a
         GROUP BY GROUPING SETS (과일, 채소)
        )
 WHERE rk = 1
;

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

오우 마농님 감사합니다.

대단하십니당~~ 와우와우

 

그런데 과일, 채소 두개일땐 되는데   제가 하는것은 과자, 해산물, 등등  6개정도가 되서

적용하니까 안되네요...

NVL2 랑

NVL 에  매개변수 숫자때문에요

 

이런문제가 생길줄이야  

연구해보겠습니다. 쿼리문 고맙습니다.

이용헌(dldydgjs10)님이 2012-08-09 08:56에 작성한 댓글입니다.
이 댓글은 2012-08-09 10:03에 마지막으로 수정되었습니다.

하긴햇는데 너무 무식하네요 -_-;;

 

WITH table_A AS
 (
 SELECT '사과' 과일, '당근' 채소, '새우깡' 과자 FROM dual
 UNION ALL SELECT '사과', '양파', '새우깡' FROM dual
 UNION ALL SELECT '딸기', '당근', '자갈치' FROM dual
 UNION ALL SELECT '사과', '양파', '자갈치' FROM dual
 UNION ALL SELECT '수박', '당근', '자갈치' FROM dual
 UNION ALL SELECT '수박', '양파', '자갈치' FROM dual
 )
 SELECT
     구분, 품목, 갯수
     ,CASE WHEN 과일_비율 > 채소_비율 AND 과일_비율 > 과자_비율 THEN 과일_비율
           WHEN 채소_비율 > 과일_비율 AND 채소_비율 > 과자_비율 THEN 채소_비율
           WHEN 과자_비율 > 과일_비율 AND 과자_비율 > 채소_비율 THEN 과자_비율
           END AS 비율
   FROM (
         SELECT
             NVL2(과일, '과일', CASE WHEN 채소 IS NOT NULL THEN '채소'
                                    ELSE (CASE WHEN 과자 IS NOT NULL THEN '과자' END)END) AS 구분
            ,NVL(과일, CASE WHEN 채소 IS NOT NULL THEN 채소
                                    ELSE (CASE WHEN 과자 IS NOT NULL THEN 과자 END)END) AS 품목
            ,COUNT(*) AS 갯수
            ,ROUND(RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY GROUPING(과일)) * 100, 2) AS 과일_비율
            ,ROUND(RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY GROUPING(채소)) * 100, 2) AS 채소_비율
            ,ROUND(RATIO_TO_REPORT(COUNT(*)) OVER(PARTITION BY GROUPING(과자)) * 100, 2) AS 과자_비율
            ,DENSE_RANK() OVER(PARTITION BY GROUPING (과일) ORDER BY COUNT(*) DESC) 과일_RK
            ,DENSE_RANK() OVER(PARTITION BY GROUPING (채소) ORDER BY COUNT(*) DESC) 채소_RK
            ,DENSE_RANK() OVER(PARTITION BY GROUPING (과자) ORDER BY COUNT(*) DESC) 과자_RK
         FROM table_a
         GROUP BY GROUPING SETS (과일, 채소, 과자)
         )
   WHERE 과일_RK = 1
   OR 채소_RK = 1
   OR 과자_RK = 1
 ;

 

이용헌(dldydgjs10)님이 2012-08-09 13:59에 작성한 댓글입니다.

-- 빨간색 표시부분만 적절히 조절하시면 되겠습니다.

SELECT lv
     , 구분, 품목
     , 갯수, 비율
  FROM (
        SELECT lv
             , DECODE(lv, 1, '과일', 2, '채소', 3, '과자') 구분
             , DECODE(lv, 1,  과일 , 2,  채소 , 3,  과자 ) 품목
             , COUNT(*) 갯수
             , RATIO_TO_REPORT(COUNT(*))
               OVER(PARTITION BY lv) * 100 비율
             , RANK()
               OVER(PARTITION BY lv
               ORDER BY COUNT(*) DESC) rk
          FROM table_a
             , (SELECT LEVEL lv FROM dual CONNECT BY LEVEL <= 3)
         GROUP BY lv
             , DECODE(lv, 1,  과일 , 2,  채소, 3,  과자 )
        )
 WHERE rk = 1
;

마농(manon94)님이 2012-08-09 14:57에 작성한 댓글입니다.
이 댓글은 2012-08-09 15:00에 마지막으로 수정되었습니다.

헉 고맙습니다. 잘 작동하네요. ^^

이용헌(dldydgjs10)님이 2012-08-09 15:20에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
39588SQL 조언 부탁합니다. [1]
아무개
2012-08-10
4277
39586데이터 삭제시 조건절에 index가 걸리는 건지? [1]
짜집기
2012-08-09
4069
39585문자형으로 입력된 값에서 숫자 형태로 입력된 데이터만 조회가 가능할까요 ? [3]
이솔렛
2012-08-09
6034
39584카운트를 해야하는데 쿼리로 가능할까요?? [5]
이용헌
2012-08-08
5926
39583ROLLUP사용법 [1]
궁금
2012-08-08
5424
39581오라클 입문 왕초보입니다... 좀 알려주세요..
막바지
2012-08-07
4316
39579대용량 데이타 업데이트 처리... [2]
강가딘
2012-08-06
7459
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.021초, 이곳 서비스는
	PostgreSQL v16.2로 자료를 관리합니다