[英]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.