Записи SQL COUNT в таблице 2 объединяются - PullRequest
3 голосов
/ 08 апреля 2010

Используя 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

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 ..."

Я хотел бы отобразить таблицу шаблонов и количество проектов, в которых они используются. Итак, результат должен быть (обновлен!):

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

Я пробовал все виды SQL-запросов, используя различные JOIN, но я думаю, что это слишком сложно для меня.Можно ли получить этот результат с помощью одного оператора SQL?

Ответы [ 5 ]

2 голосов
/ 08 апреля 2010
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
1 голос
/ 08 апреля 2010
Select TemplateId,
       Count(distinct projectId) as ProjectCount,
FROM batches 
Group By TemplateId

Надеюсь, это должно сработать.

Нам нужно отличное от образцов данных, я вижу один и тот же шаблон, и проект имеет несколько строк ......

0 голосов
/ 08 апреля 2010

Из приведенного выше необходимого образца 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
0 голосов
/ 08 апреля 2010

Я не уверен в синтаксисе 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 голосов
/ 08 апреля 2010

вы пробовали что-то вроде этого: -

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