Using MySQL, I have three tables:
projects:
ID name
1 "birthday party"
2 "soccer match"
3 "wine tasting evening"
4 "dig out garden"
5 "mountainbiking"
6 "making music"
batches:
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
templates:
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 ..."
I would like to display a table of templates and the number of projects they're used in. So, the result should be (updated!):
templateName projectCount
inf1 3
for1 1
can1 1
inf2 0
all1 1
inf3 0
I've tried all kinds of SQL queries using various JOINs, but I guess this is too complicated for me. Is it possible to get this result using a single SQL statement?
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
Select TemplateId,
Count(distinct projectId) as ProjectCount,
FROM batches
Group By TemplateId
I hope this should work.
We need distinct as from sample data i can see same template and project has multiple rows ......
have you tried something like this:-
SELECT TemplateId, COUNT(ProjectId) AS ProjectCount FROM Batches GROUP BY TemplateId
From the o/p required sample you given above i assume you want numbers of templateId as a projectCount
select templateID, count(templateID) as projectCount from batches group by templateID
EDIT (AFTER question EDIT)
select t.name as templateName, count(b.templateID) as projectCount from batches b, templates t where b.templateID=t.id group by t.id
I am not sure about the mySql syntax, but this should do:
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
精彩评论