简体   繁体   English

MySQL连接并根据其列值进行计数

[英]MySQL join and count according to its column value

If I have a MySQL table looking something like this: 如果我有一个看起来像这样的MySQL表:

breeds

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

And a MySQL table looking like this: 和一个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

Is it possible to run a MySQL query to get output like this: 是否可以运行MySQL查询以获取如下输出:

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

I would like to have a JOIN or similar that count the number of females/males from the dogs table. 我想要一个JOIN或类似的东西来计算狗表中的雌性/雄性数量。

You can do this: 你可以这样做:

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

Explanation: 说明:

using LEFT JOIN will include the record eventhough there is male/female count. 即使有男性/女性人数,使用LEFT JOIN也会包括该记录。 IFNULL will replace the null value with 0. IFNULL将空值替换为0。

Result: 结果:

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

Sample result in SQL Fiddle . SQL Fiddle中的示例结果。

Or alternatively: 或者:

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

see here: http://www.sqlfiddle.com/#!9/03da0/1 看到这里: http : //www.sqlfiddle.com/#!9/03da0/1

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

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