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 40933 게시물 읽기
No. 40933
SQL 배우는 학생입니다. 도움 부탁드립니다.
작성자
SQL학생
작성일
2015-09-11 09:26ⓒ
2015-09-11 09:27ⓜ
조회수
8,438

마농님 안녕하세요. SQL 공부중에 아래와 같은걸 Count하는 방법을 몰라 여쭤봅니다.

답변 부탁드리겠습니다. 감사합니다

지역 휴대폰기종 보유우무
강남1호 - 가능
강남1호 아이폰 불가능
강남2호 - 가능
강남2호 갤럭시 불가능
역삼1호 - 가능
역삼2호 - 가능
역삼2호 아이폰 불가능
선릉1호 - 불가능
선릉2호 - 불가능

선릉2호

아이폰 가능

 

위와 같은 Table이 있습니다.

Table 내용을 설명 드리면, 휴대폰 기종의 "-" 대쉬는 모두다 라는 의미를 담고있습니다

여기서저는 아래와 같이 매장수를 구하는 쿼리를 짜고 싶습니다.

※가능한 매장 컬럼는 필요없고 어떻게 계산된것인지 설명드리고자 삽입했습니다.

기종 매장수 비율 가능한 매장
아이폰 3 0.5 강남2호,역삼1호,선릉2호
갤럭시 3 0.5 강남1호,역삼1호,역삼2호

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

 우선 데이터가... 전체 기종에 대해서 보유여부를 체크하고, 다시 각각의 항목에 대해서 보유여부를 체크하는 방식으로 테이블을 설계하신것 같은데요... 

 

우선 주신 조건에 맞는 SQL을 만들어보자면 아래와 같은 형태로 만들어볼 수 있겠네요

단, 아래의 제약조건 지켜져야 합니다.

    1. 매장 별로 반드시 '-' 데이터가 있어야 한다.

    2. 휴대폰 기종별 보유유무 데이터는 반드시 '-' 데이터와 반대의 형태로만 들어가야 한다.

    3. 보유유무 판단 기준의 우선순위는 기종별 보유유무 > 전체 보유유무 로 한다.

 

Select 기종, SUM(판매가능여부) 매장수, SUM(판매가능여부) / count(*) 비율

from

(

   Select  '아이폰' 기종, 

                지역,

                 SUM(CASE WHEN 휴대폰기종 = '-' AND 보유유무 = '가능' THEN 1

                                       WHEN 휴대폰기종 = '아이폰' AND 보유유무 = '가능' THEN 1

                                       WHEN 휴대폰기종 = '아이폰' AND 보유유무 = '불가능' THEN -1

                             ELSE 0 END  ) 판매가능여부

   From 테이블

   Group by 1,2

 

   Union ALL

 

 

 

   Select  '갤럭시' ,

                지역,

                 SUM(CASE WHEN 휴대폰기종 = '-' AND 보유유무 = '가능' THEN 1

                                       WHEN 휴대폰기종 = '갤럭시' AND 보유유무 = '가능' THEN 1

                                       WHEN 휴대폰기종 = '갤럭시' AND 보유유무 = '불가능' THEN -1

                             ELSE 0 END  ) 판매가능여부

   From 테이블

   Group by 1,2

  )

group by 기종

 

 

최성혁(blutgere)님이 2015-09-11 16:07에 작성한 댓글입니다.

지금 주신 테이블 구조는 글자 그대로 "이런 형태의 데이터 구조에서 이런 데이터를 뽑기 위한 기술 연습"을 위한 테이블 구조라는 전제하에서 답변을 드렸구요... 

 

저런 테이블 구조는 가급적 지양하시기 바랍니다...

 

그냥 지나가던 개발자였습니다.

최성혁(blutgere)님이 2015-09-11 16:09에 작성한 댓글입니다.
[Top]
No.
제목
작성자
작성일
조회
40936이 sql도 좀 봐주세요. [2]
이현정
2015-09-14
8382
40935exp 덤프시 오류발생하고 있습니다.. ㅡ.ㅜ; [1]
박현수
2015-09-11
10275
40934한번 덤프떠서 import 시키는 방법 없나요?
박현수
2015-09-11
8739
40933SQL 배우는 학생입니다. 도움 부탁드립니다. [2]
SQL학생
2015-09-11
8438
40932union all로 테이블 별로 cnt 항목을 [1]
김인철
2015-09-11
8432
40931SELECT 정렬? 질문드려요 [2]
대국적쿼리
2015-09-10
8006
40930한 행에 DATA 이어붙이기 [1]
초보
2015-09-10
8374
Valid XHTML 1.0!
All about the DATABASE... Copyleft 1999-2024 DSN, All rights reserved.
작업시간: 0.023초, 이곳 서비스는
	PostgreSQL v16.4로 자료를 관리합니다