我有两张桌子 - 如下所示
_permissions
project_id | project_name | something_else
------------------------------------------
19 | name here | lksdjlskdfj
19 | name here | dflkdkglfkg
19 | name here | lksdjlskdfj
20 | name here!! | dflkdkglfkg
簿
project_id | name
-----------------
19 | A
19 | B
19 | C
20 | D
20 | E
我希望查询的结果集是
结果
project_id | project_name | count
------------------------------------------
19 | name here | 3
20 | name here!! | 2
这是我最接近但没有用的。请指教!在上面的例子中,它吐出了9和2的计数
SELECT DISTINCT p.project_id,p.project_name,count(w.project_id)
FROM _permissions as p
LEFT OUTER JOIN workbooks AS w
ON p.project_id = w.project_id
GROUP BY p.project_id,p.project_name
ORDER BY p.project_name
如果出于性能目的,我宁愿使用JOINs
有一个项目表,唯一有用的列是ID
项目
id | name
----------------
19 | name here
20 | name here!!
答案 0 :(得分:2)
这对你的桌子来说并不是一个很好的设计。您应该有一个projects
表,其中包含每个项目的名称,每行只有一个项目。无论如何,你可以用你当前的设计做这样的事情:
SELECT w.project_id,
p.project_name,
w.[count]
FROM ( SELECT project_id, COUNT(*) [count]
FROM workbooks
GROUP BY project_id) w
INNER JOIN (SELECT project_id, MIN(project_name) project_name
FROM _permissions
GROUP BY project_id) p
ON w.project_id = p.project_id
使用projects
表,则查询应为:
SELECT w.project_id,
p.project_name,
w.[count]
FROM ( SELECT project_id, COUNT(*) [count]
FROM workbooks
GROUP BY project_id) w
INNER JOIN projects p
ON w.project_id = p.project_id
答案 1 :(得分:-1)
SELECT DISTINCT p.project_id,p.project_name,count(distinct w.name)
FROM _permissions as p
JOIN workbooks AS w
ON p.project_id = w.project_id
GROUP BY p.project_id,p.project_name
ORDER BY p.project_name
仅当w.name不同时才能工作。