2010-04-08 46 views
3

使用MySQL,我有三个表:SQL COUNT记录JOINS远

项目

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 

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

回答

2
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 
+0

是的!就是那个! (虽然我不得不将“DISTICT batch.projectID”更改为“DISTINCT b.projectID”)。产量完全如我所愿。万分感谢,安东尼! – 2010-04-08 09:25:09

0

你尝试过这样的事情: -

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

@Ashish - 在不需要想要的结果的加入。所有数据都存在于“批次”表中。 – Oded 2010-04-08 08:07:15

+0

是的..我刚刚意识到并更新了我的答案。谢谢。 :-) – 2010-04-08 08:08:19

+0

对不起Ashish,我已经更新了我的示例,因为我需要输出中的模板表中的一列。谢谢你的时间。 – 2010-04-08 08:24:14

0

从您提供的O/P所需的样本上述,我想,你希望templateId的数字作为一个projectCount

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

EDIT(AFTER问题编辑)

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

谢谢Salil的更新。我尝试了你的建议,但模板#1(“inf1”)的projectCount为3,你的语句输出为5.另外,模板#4和#6不显示。感谢你们对我的帮助。 – 2010-04-08 08:40:24

0

我不知道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 
+0

这是不正确的; OP希望模板1,项目计数3;您的查询返回模板1,projectcount 5. – systempuntoout 2010-04-08 08:12:37

+0

@systempuntoout - 感谢您的更正。答案已更新。 – Oded 2010-04-08 08:14:26

+0

抱歉Oded,我更新了我的示例,因为我需要输出中的模板表中的一列。谢谢你的时间。 – 2010-04-08 08:23:50

1
Select TemplateId, 
     Count(distinct projectId) as ProjectCount, 
FROM batches 
Group By TemplateId 

我希望这应该工作。

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

+0

“项目”和“模板”表使用“批次”链接,该表不应该出现在公式的某个位置? – 2010-04-08 08:11:45

+0

哦对不起...而不是模板它应该是批次...感谢您指出,更新上面的答案.... – 2010-04-08 08:12:42

+0

对不起Nitin Midha,我更新了我的示例,因为我需要输出中的模板表中的一列。谢谢你的时间。 – 2010-04-08 08:23:17