如何在一张表上查找不同 ID 的数量
Posted
技术标签:
【中文标题】如何在一张表上查找不同 ID 的数量【英文标题】:How to find the number of Distinct ID's on one table 【发布时间】:2021-01-14 23:39:30 【问题描述】:SELECT Count(Teams.Name)
, Teams.TeamID
, Teams.Name
FROM Teams, Rosters
WHERE Rosters.TeamID = Teams.TeamID
到目前为止是我的查询。我希望它打印与 Teams.TeamID 对应的 Rosters.TeamID 的条目数。
【问题讨论】:
首先我建议你切换到 ANSI 连接。 谢谢@alexherm! 是否会出现Rosters
中的TeamID
与Teams
中的TeamID
不匹配的情况?如果该数据库中有基本的 RI,计算 Rosters
中的 DISTINCT
TeamID
值——不使用任何 JOIN
——应该就足够了????
@matigo 是的,有些团队在 Rosters 中没有 TeamID 值,但在 Teams 中却有
如果Rosters
中的TeamID
值为NULL
,它将被排除在COUNT(DISTINCT TeamID)
之外。或者,可以加入一些条件来处理数据库设计决策COUNT(DISTINCT CASE WHEN IFNULL(TeamID, 0) > 0 THEN TeamID ELSE NULL END)
...但随后您开始编写丑陋的代码只是为了保存索引查找。
【参考方案1】:
我想你想要的查询是:
SELECT t.TeamID, t.Name, COUNT(*)
FROM Teams t JOIN
Rosters r
ON r.TeamID = t.TeamID
GROUP BY t.TeamID, t.Name;
基本上,您的查询缺少GROUP BY
,但您还应该学习正确的JOIN
语法。
【讨论】:
join 在这里完成了什么?如果您删除了加入并离开了群组,这在逻辑上最终会与您发布的内容相同吗? @TaylorV 。 . .接受的答案在许多方面都是不正确的。我认为这个问题应该有一个正确的答案,无论是语法上还是逻辑上。 @GordonLinoff 非常感谢您的回答。我刚刚接受了之前的答案,没有进行实际测试,因为这纯粹是一项家庭作业。 @GordonLinoff 哦,抱歉,我没有质疑您的解决方案。据我所知,鉴于没有从Rosters r
表中选择任何内容,我只是在询问联接在此查询中做了什么。我仍然不确定我是否理解。
@TaylorV 。 . .由于JOIN
,正在生成额外的行。这就是正在计算的内容。我可以看出这可能会让学习 SQL 的人感到困惑。以上是关于如何在一张表上查找不同 ID 的数量的主要内容,如果未能解决你的问题,请参考以下文章