繁体   English   中英

如何在 MySQL 的 SELECT 语句中正确添加附加列?

[英]How to properly add an additional column in a SELECT statement in MySQL?

我想提取在两个不同的月份:三月和四月发生的“表演”中“教练”的出席人数(即 COUNT())。 我设法创建了一个仅在一个月内收集该数字的查询。 另外,通过稍微修改查询,可以很容易地找到第二个月的数字。 但是如何将它们合并到一个包含两列的表中?

那么,鉴于下面的两个查询和结果表,如何将查询 2 的结果“附加”到查询 1 的结果中? 换句话说,如何组合它们各自的 SELECT 语句?

我包含了 SQL 小提琴的链接,以防您需要它们。

先感谢您。

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 (最小差异,查询四月而不是三月):

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
  ...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM