【问题标题】:SQL COUNT records in table 2 JOINS away表 2 JOINS 中的 SQL COUNT 记录
【发布时间】:2010-04-08 08:01:25
【问题描述】:

使用 MySQL,我有三个表:

项目

ID  name
1   "birthday party"
2   "soccer match"
3   "wine tasting evening"
4   "dig out garden"
5   "mountainbiking"
6   "making music"

批次

ID  projectID  templateID  when
1   1          1            7 days before
2   1          1            1 day  before
3   4          2           21 days before
4   4          1            7 days before
5   5          1            7 days before
6   3          5            7 days before
7   3          3           14 days before
8   5          1           14 days before

模板

ID  name  message
1   inf1  "Hi, I'd like to invite ..."
2   for1  "Dear Sir, Madam, ..."
3   can1  "Can you please ..."
4   inf2  "Would you like to ..."
5   all1  "To all dear friends ..."
6   inf3  "Does any of you guys ..."

我想显示一个模板表格以及使用它们的项目数量。 所以,结果应该是(更新!):

templateName  projectCount
inf1          3
for1          1
can1          1
inf2          0
all1          1
inf3          0

我已经尝试过使用各种 JOIN 的各种 SQL 查询,但我想这对我来说太复杂了。是否可以使用单个 SQL 语句得到这个结果?

【问题讨论】:

    标签: sql mysql select join count


    【解决方案1】:
    SELECT t.name templateName, COUNT(DISTICT b.projectID) projectCount
    FROM templates t
    LEFT OUTER JOIN batches b ON t.ID = b.templateID
    GROUP BY t.ID, t.name
    ORDER BY t.ID
    

    【讨论】:

    • 是的!就是那个! (尽管我不得不将“DISTICT batches.projectID”更改为“DISTINCT b.projectID”)。输出完全如我所愿。谢谢一百万,安东尼!
    【解决方案2】:
    Select TemplateId,
           Count(distinct projectId) as ProjectCount,
    FROM batches 
    Group By TemplateId
    

    我希望这应该可行。

    我们需要不同的样本数据,我可以看到相同的模板和项目有多行......

    【讨论】:

    • “项目”和“模板”表使用“批次”链接,该表不应该出现在等式中的某处吗?
    • 哦,对不起...而不是模板应该是批量...感谢您的指点,更新了上面的答案....
    • 抱歉 Nitin Midha,我已经更新了我的示例,因为我还需要输出中模板表中的一列。感谢您的宝贵时间。
    【解决方案3】:

    你有没有尝试过这样的事情:-

    SELECT TemplateId, COUNT(ProjectId) AS ProjectCount FROM Batches GROUP BY TemplateId
    

    【讨论】:

    • @Ashish - 想要的结果不需要加入。所有数据都存在于batches 表中。
    • 抱歉 Ashish,我已经更新了我的示例,因为我还需要输出中模板表中的一列。感谢您的宝贵时间。
    【解决方案4】:

    根据您上面给出的 o/p 所需示例,我假设您希望将 templateId 的数量作为 projectCount

    select templateID, count(templateID) as projectCount from batches group by templateID
    

    编辑(问题编辑后)

    select t.name as templateName, count(b.templateID) as projectCount from batches b, templates t where b.templateID=t.id group by t.id
    

    【讨论】:

    • 感谢 Salil 的更新。我尝试了您的建议,但模板 #1(“inf1”)的 projectCount 为 3,而您的语句输出 5。此外,模板 #4 和 #6 不显示。谢谢你帮助我。
    【解决方案5】:

    我不确定 mySql 的语法,但应该这样做:

    SELECT t.name as templateName, COUNT(DISTINCT b.projectID) as projectCount
    FROM batches b
    INNER JOIN templates t
      ON b.templateId = t.ID
    GROUP BY t.name
    

    【讨论】:

    • 不正确; OP想要模板1,projectcount 3;您的查询返回模板 1,projectcount 5。
    • 抱歉 Oded,我已经更新了我的示例,因为我还需要输出中模板表中的一列。感谢您的宝贵时间。
    • @Fred K - 答案已更新,应该为您提供模板名称和项目数。
    • 感谢 Oded 的更新。查询的输出没问题,只是项目(4 和 6)中未使用的模板没有显示在输出中。
    猜你喜欢
    • 2012-06-13
    • 1970-01-01
    • 2021-04-07
    • 2014-07-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 2012-06-15
    相关资源
    最近更新 更多