gpt4 book ai didi

mysql - 列出具有 null 值的频率

转载 作者:行者123 更新时间:2023-11-29 23:46:47 25 4
gpt4 key购买 nike

我在 Mysql 中有一个数据库,我想计算一个团队有多少种类型的玩家。我的问题是我想展示所有类型的球员,即使球队没有那种球员。让我向您展示数据表:

INSERT INTO typePlayer (id_typeplayer,type_player,id_race) VALUES
(57,"zombi",15),
(58,"necrofago",15),
(59,"tumulario",15),
(60,"Hobre Lobo",15),
(61,"Golem de Carne",15);

INSERT INTO teams (id_team, id_race) VALUES
(7,15);

INSERT INTO Players (id_player, id_typeplayer, id_team) VALUES
(1,60,7),
(2,60,7),
(3,58,7),
(4,58,7),
(5,59,7),
(6,59,7),
(7,57,7),
(8,57,7),
(9,57,7),
(10,57,7),
(11,57,7);

我希望有一个查询可以给我这个:

57,zombi,5
58,necrofago,2
59,tumulario,2
60,Hombre Lobo,2
61,Golem de Carne,0

我的问题是我无法显示最后一行(其中 count 为空,因为球队没有该类型的球员)我已经尝试过了,结果很糟糕:

SELECT tP.id_typeplayer,
count(p.id_typeplayer) cant,
p.id_team
FROM players p
JOIN typePlayer tP ON(tP.id_typeplayer=p.id_typeplayer)
WHERE (p.status='En activo'
OR p.status='Lesionado')
AND p.independiente='No'
AND p.zombificado='No'
AND p.id_team=7
AND tP.id_race=15
GROUP BY tP.id_typeplayer HAVING cant>=0

我会感谢任何帮助

最佳答案

尝试这个 SQL,您需要的是包含所有 typePlayer 元组,即使没有该类型的玩家。如果 typePlayer 表位于左侧,则为左连接;如果 typePlayer 表位于右侧,则为右连接。

我实际上访问了您在 sqlfiddle 中提供的链接。您的 typePlayer 表位于右侧,因此我将其更改为右连接。生成的SQL如下

SELECT tP.id_typeplayer,tp.type_player,
sum(if(p.id_team is null, 0,1)) cant,
p.id_team
FROM players p
RIGHT JOIN typePlayer tP ON(tP.id_typeplayer=p.id_typeplayer)
GROUP BY tP.id_typeplayer

您在评论中提到的另一件事是只有 id_team=7 我认为您只需要在像这样的 where 子句中过滤掉它。

SELECT tP.id_typeplayer,tp.type_player,
sum(if(p.id_team is null, 0,1)) cant,
p.id_team
FROM players p
RIGHT JOIN typePlayer tP ON(tP.id_typeplayer=p.id_typeplayer)
WHERE p.id_team=7 or p.id_team is null
GROUP BY tP.id_typeplayer

关于mysql - 列出具有 null 值的频率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25883695/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com