开发者

SQL COUNT records in table 2 JOINS away

开发者 https://www.devze.com 2022-12-26 06:17 出处:网络
Using MySQL, I have three tables: projects: IDname 1\"birthday party\" 2\"soccer match\" 3\"wine tasting evening\"

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
0

精彩评论

暂无评论...
验证码 换一张
取 消