해당 이슈를 쿼리 하나로 해결할 수 있을까요? 0 3 456

by 식민최 [SQL Query] [2022.03.08 15:57:10]


MYSQL 입니다.

-- DATA
# LG DISPLAY
# ('LG1', 'LG2', 'LG3', 'LG4', 'LG5')

# APPLE
# ('APPLE1', 'APPLE2', 'APPLE3', 'APPLE4', 'APPLE5')

# SAMSUNG ELECTRONICS
# ('SAMSUNG1', 'SAMSUNG2', 'SAMSUNG3', 'SAMSUNG4', 'SAMSUNG5')

-- EXAMPLE QUERY
SELECT COUNT(*)
FROM TSET
WHERE id IN 
# ('LG1', 'LG2', 'LG3', 'LG4', 'LG5')
# ('APPLE1', 'APPLE2', 'APPLE3', 'APPLE4', 'APPLE5')
# ('SAMSUNG1', 'SAMSUNG2', 'SAMSUNG3', 'SAMSUNG4', 'SAMSUNG5')

-- RESULT                           
| NAME                | COUNT |
|---------------------|-------|
| LG DISPLAY          | 23    |
| APPLE               | 4     |
| SAMSUNG ELECTRONICS | 32    |

또는

| LG DISPLAY | APPLE | SAMSUNG ELECTRONICS |
|------------|-------|---------------------|
| 23         | 4     | 32                  |

 

위 EXAMPLE QUERY 처럼 해당 DATA 값의 카운트를 RESULT 처럼 출력 하고 싶습니다.

해당 작업을 하나의 쿼리로 처리할 수 있는 방법 있나요?

LG DISPLAY, APPLE, SAMSUNG ELECTRONICS 은 테이블에 없는 값입니다.

 

현재 시도 해본건

SELECT
       (IF(id IN ('LG1', 'LG2', 'LG3', 'LG4', 'LG5'), COUNT(*), 0)) AS 'LG DISPLAY',
       (IF(id IN ('APPLE1', 'APPLE2', 'APPLE3', 'APPLE4', 'APPLE5'), COUNT(*), 0)) AS 'APPLE',
       (IF(id IN ('SAMSUNG1', 'SAMSUNG2', 'SAMSUNG3', 'SAMSUNG4', 'SAMSUNG5'), COUNT(*), 0)) AS 'SAMSUNG ELECTRONICS'
FROM TEST where id in ('LG1', 'LG2', 'LG3', 'LG4', 'LG5', 'APPLE1', 'APPLE2', 'APPLE3', 'APPLE4', 'APPLE5', 'SAMSUNG1', 'SAMSUNG2', 'SAMSUNG3', 'SAMSUNG4', 'SAMSUNG5');

인데

| LG DISPLAY | APPLE | SAMSUNG ELECTRONICS |
|------------|-------|---------------------|
| 0          | 0     | 78                  |

값이 SAMSUNG ELECTRONICS에 몰리네요..

by 우주민 [2022.03.08 16:45:07]
SELECT 
       sum(case when id IN ('LG1', 'LG2', 'LG3', 'LG4', 'LG5') then 1 else 0 end) AS 'LG DISPLAY',
       sum(case when id IN ('APPLE1', 'APPLE2', 'APPLE3', 'APPLE4', 'APPLE5') then 1 else 0 end) AS 'APPLE',
       sum(case when id IN ('SAMSUNG1', 'SAMSUNG2', 'SAMSUNG3', 'SAMSUNG4', 'SAMSUNG5') then 1 else 0 end) AS 'SAMSUNG ELECTRONICS'
FROM ~~

혹시 이런 형태로 카운트 해보는 것은 어떨까요?


by 식민최 [2022.03.08 17:07:21]

감사합니다!


by 마농 [2022.03.08 17:37:58]

IF(COUNT()) 형태로 작성하셨네요. COUNT(IF()) 형태로 작성하셔야 합니다.
- 오류 : IF(id IN ('LG1', 'LG2', 'LG3', 'LG4', 'LG5'), COUNT(*), 0)
- 수정 : COUNT(IF(id IN ('LG1', 'LG2', 'LG3', 'LG4', 'LG5'), 1, null))

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입