source

MySQL의 SELECT 문에 열을 올바르게 추가하는 방법은 무엇입니까?

lovecheck 2023. 8. 15. 11:14
반응형

MySQL의 SELECT 문에 열을 올바르게 추가하는 방법은 무엇입니까?

저는 3월과 4월 두 달 동안 진행되는 "쇼"에서 "코치"의 참석자 수(예: COUNT())를 추출하고 싶습니다.저는 한 달 중 한 달 동안만 해당 숫자를 수집하는 쿼리를 만들 수 있었습니다.또한 쿼리를 약간 수정하여 두 번째 달의 숫자를 쉽게 찾을 수 있습니다.그러나 두 열을 모두 포함하는 하나의 테이블로 병합하려면 어떻게 해야 합니까?

그렇다면 아래의 두 개의 쿼리와 결과 테이블을 고려할 때 쿼리 2의 결과를 쿼리 1의 결과에 어떻게 "첨부"할 수 있을까요?즉, 각 SELECT 문을 어떻게 결합할 수 있습니까?

필요할 때를 대비해 SQL fiddle에 대한 링크를 첨부했습니다.

잘 부탁드립니다.

SQL 피들

쿼리 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

반응형