如何在一张表上查找不同 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 中的TeamIDTeams 中的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 的数量的主要内容,如果未能解决你的问题,请参考以下文章

使用多线程代码在一张表上发生 MySQL 死锁

如何在 Oracle SQL 中查找和过滤同一张表上的数据

如何在不同日期减少具有相同 ID 的多条记录

MYSQL 将两张表整合在一张表中,不会遗漏任何一行

两张表 在一张表中插入数据时要使用触发器也更新另一张 有错误

SQL问题,怎么将一张表的某个字段更新为另一张表的字段