반응형
MySQL의 SELECT 문에 열을 올바르게 추가하는 방법은 무엇입니까?
저는 3월과 4월 두 달 동안 진행되는 "쇼"에서 "코치"의 참석자 수(예: COUNT())를 추출하고 싶습니다.저는 한 달 중 한 달 동안만 해당 숫자를 수집하는 쿼리를 만들 수 있었습니다.또한 쿼리를 약간 수정하여 두 번째 달의 숫자를 쉽게 찾을 수 있습니다.그러나 두 열을 모두 포함하는 하나의 테이블로 병합하려면 어떻게 해야 합니까?
그렇다면 아래의 두 개의 쿼리와 결과 테이블을 고려할 때 쿼리 2의 결과를 쿼리 1의 결과에 어떻게 "첨부"할 수 있을까요?즉, 각 SELECT 문을 어떻게 결합할 수 있습니까?
필요할 때를 대비해 SQL fiddle에 대한 링크를 첨부했습니다.
잘 부탁드립니다.
쿼리 1:
SELECT C.*, COUNT(CIS.idCoach) AS MarchNumOfShows
FROM Coach AS C
LEFT JOIN
(
CoachInShow AS CIS
LEFT JOIN
TVShow AS S
ON S.idShow = CIS.idShow
)
ON C.idCoach = CIS.idCoach AND S.airDate LIKE '_____04___'
GROUP BY C.idCoach
결과:
| idCoach | name | surname | MarchNumOfShows |
|---------|-----------|---------|-----------------|
| 1 | Stephen | Hawking | 5 |
| 2 | Nicholas | Cage | 7 |
| 3 | Sigourney | Weaver | 6 |
쿼리 2(최소 차이, 3월이 아닌 4월에 대한 쿼리):
SELECT COUNT(CIS.idCoach) AS AprilNumOfShows
FROM Coach AS C
LEFT JOIN
(
CoachInShow AS CIS
LEFT JOIN
TVShow AS S
ON S.idShow = CIS.idShow
)
ON C.idCoach = CIS.idCoach AND S.airDate LIKE '_____05___'
GROUP BY C.idCoach
결과:
| AprilNumOfShows |
|-----------------|
| 8 |
| 7 |
| 10 |
원함:
| idCoach | name | surname | MarchNumOfShows | AprilNumOfShows |
|---------|-----------|---------|-----------------|-----------------|
| 1 | Stephen | Hawking | 5 | 8 |
| 2 | Nicholas | Cage | 7 | 7 |
| 3 | Sigourney | Weaver | 6 | 10 |
당신은 매우 가깝습니다, 당신이 놓친 마지막 단계는.simply combine MarchNumOfShows and AprilNumOfShows with left join
.
아래 코드와 같은 것(또는 Sql Fiddle 조사):
SELECT C.idCoach, C.name, C.surname, COUNT(distinct CIS4.idShow) AS MarchNumOfShows
, COUNT(distinct CIS5.idShow) AS AprilNumOfShows
FROM Coach AS C
LEFT JOIN
(
CoachInShow AS CIS4
LEFT JOIN
TVShow AS S4
ON S4.idShow = CIS4.idShow
)
ON C.idCoach = CIS4.idCoach AND S4.airDate LIKE '_____04___'
LEFT JOIN
(
CoachInShow AS CIS5
LEFT JOIN
TVShow AS S5
ON S5.idShow = CIS5.idShow
)
ON C.idCoach = CIS5.idCoach AND S5.airDate LIKE '_____05___'
GROUP BY C.idCoach;
다음은 동일한 출력을 얻는(또는 SQL Fiddle을 조사하는) 또 다른 방법입니다.
SELECT C.idCoach, C.name, C.surname,
sum(case when DATE_FORMAT(airDate,'%M')='April' then 1 else null end ) AS AprilNumOfShows,
sum(case when DATE_FORMAT(airDate,'%M')='May' then 1 else null end ) AS MayNumOfShows
FROM Coach AS C
LEFT JOIN
(
CoachInShow AS CIS
LEFT JOIN
TVShow AS S
ON S.idShow = CIS.idShow
)
ON C.idCoach = CIS.idCoach
GROUP BY C.idCoach;
한 가지 방법은 사례를 사용하는 것입니다.
select *,
sum(case when airdate like "%03%" then 1 else 0 end) as March,
sum(case when airdate like "%04%" then 1 else 0 end) as April
...
언급URL : https://stackoverflow.com/questions/49016087/how-to-properly-add-an-additional-column-in-a-select-statement-in-mysql
반응형
'source' 카테고리의 다른 글
MariaDb 10.6의 NVARCHAR 열에 대한 기본 데이터 정렬 변경 (0) | 2023.08.20 |
---|---|
ADB 셸 입력 이벤트 (0) | 2023.08.15 |
Python에서 Google Authenticator 구현 (0) | 2023.08.15 |
/usr/bin/codesign이 종료 코드 1과 함께 실패했습니다. (0) | 2023.08.15 |
Spring @Value 주석에서 기본값을 올바르게 지정하는 방법은 무엇입니까? (0) | 2023.08.15 |