Mysql 我的两个SQL查询有问题

Mysql 我的两个SQL查询有问题,mysql,Mysql,我有一个带有结构的表prod 身份证,姓名,关键字,出生年份 例如,需要将在字段yearborn中遇到的关键字分组数带入 SELECT yearborn, COUNT(Id) cnt1 FROM prod WHERE keyword='admiral' GROUP BY yearborn 及 如何组合这两个查询以获得具有该结构的输出结果表 一岁出生,cnt1,cnt2 我试过联合 SELECT yearborn, COUNT(Id) cnt1 FROM prod WHERE keyword='

我有一个带有结构的表prod 身份证,姓名,关键字,出生年份

例如,需要将在字段yearborn中遇到的关键字分组数带入

SELECT yearborn, COUNT(Id) cnt1 FROM prod WHERE keyword='admiral'
GROUP BY yearborn

如何组合这两个查询以获得具有该结构的输出结果表

一岁出生,cnt1,cnt2

我试过联合

SELECT yearborn, COUNT(Id) cnt1 FROM prod WHERE keyword='admiral' GROUP BY yearborn
UNION
SELECT yearborn, COUNT(Id) cnt2 FROM prod WHERE keyword='captain' GROUP BY yearborn
但结果是: 一岁出生,cnt1

请告诉我如何摆脱这种局面。

怎么样:

SELECT yearborn, COUNT(Id) cnt1, NULL cnt2 FROM prod WHERE keyword='admiral' GROUP BY yearborn
UNION
SELECT yearborn, NULL cnt1, COUNT(Id) cnt2 FROM prod WHERE keyword='captain' GROUP BY yearborn
SELECT yearborn,SUM(cnt1),SUM(cnt2) FROM
( 
    SELECT yearborn, COUNT(id) cnt1, 0 cnt2 FROM prod WHERE keyword='admiral' 
    UNION ALL 
    SELECT yearborn, 0 cnt1, COUNT(id) cnt2 FROM prod WHERE keyword='captain'
) 
GROUP BY yearborn
您可以在关键字条件上使用SUM(),因为MySQL中的比较结果可以被视为0(false)或1(true):


这还具有仅使用一次表扫描的优点(比使用联合和子查询更快)。

您可以尝试以下方法:

SELECT `yearborn`,
COUNT(`Id`) AS `cnt1`
FROM `prod`
WHERE `keyword` IN ('admiral','captain')
GROUP BY `yearborn`,`keyword`;
编辑: 按语句在GROUP中添加了
关键字

  SELECT yearborn, 
         SUM(IF(keyword = 'admiral', 1, 0)) cnt1, 
         SUM(IF(keyword = 'captain', 1, 0)) cnt2 
    FROM prod 
   WHERE keyword = 'admiral'
      OR keyword = 'captain'
GROUP BY yearborn
结果如下(当然这是虚构的数据):

SELECT `yearborn`,
COUNT(`Id`) AS `cnt1`
FROM `prod`
WHERE `keyword` IN ('admiral','captain')
GROUP BY `yearborn`,`keyword`;
  SELECT yearborn, 
         SUM(IF(keyword = 'admiral', 1, 0)) cnt1, 
         SUM(IF(keyword = 'captain', 1, 0)) cnt2 
    FROM prod 
   WHERE keyword = 'admiral'
      OR keyword = 'captain'
GROUP BY yearborn
+----------+------+------+
| yearborn | cnt1 | cnt2 |
+----------+------+------+
|     2004 | 1233 |    0 |
|     1999 |    0 |   15 |
+----------+------+------+