MySQL根据其列值

时间:2015-06-08 13:34:03

标签: mysql

如果我有一个类似于这样的MySQL表:

breeds

id      name
-------------------------------
1       Labrador
2       Jack Russel Terrier
3       Shetland Sheepdog

一个看起来像这样的MySQL表:

dogs

id      owner       breed    sex
-----------------------------------
1       Sara        1        f
2       Kent        1        f
3       Billy       1        m
4       Joe         2        f
5       Billy       2        m

是否可以运行MySQL查询以获得如下输出:

id      name                  females   males
------------------------------------------------
1       Labrador              2         1
2       Jack Russel Terrier   1         1
3       Shetland Sheepdog     0         0

我想有一个JOIN或类似的东西来计算狗桌上的女性/男性人数。

2 个答案:

答案 0 :(得分:2)

你可以这样做:

SELECT b.id,b.name,
       IFNULL(SUM(CASE WHEN sex='f' THEN 1 ELSE 0 END),0) as females,
       IFNULL(SUM(CASE WHEN sex='m' THEN 1 ELSE 0 END),0) as males
FROM breeds b LEFT JOIN
     dogs d on b.id=d.breed
GROUP BY b.id,b.name

<强>解释

使用LEFT JOIN将包括记录事件,尽管有男性/女性计数。 IFNULL将使用0替换空值。

结果:

id  name                females males
-------------------------------------
1   Labrador            2       1
2   Jack Russel Terrier 1       1
3   Shetland Sheepdog   0       0

SQL Fiddle中的示例结果。

答案 1 :(得分:1)

或者:

SELECT id, name, 
   (SELECT COUNT(*) FROM dogs WHERE breed=b.id AND sex='f') females,
   (SELECT COUNT(*) FROM dogs WHERE breed=b.id AND sex='m') males
FROM breeds b

见这里:http://www.sqlfiddle.com/#!9/03da0/1