我有两个表:一个包含文件类型的Files表和一个File Properties表,它通过外键引用文件表。示例文件表:
| id | name | type |
---------------------
| 1 | file1 | zip |
| 2 | file2 | zip |
| 3 | file3 | zip |
| 4 | file4 | jpg |
属性表:
| file_id | property |
-----------------------
| 1 | x |
| 2 | x |
我想创建一个查询,它显示每种文件类型的数量,以及该类型的文件有多少属性。
因此在示例中,结果将是
| type | filecount | prop count |
----------------------------------
| zip | 3 | 2 |
| jpg | 1 | 0 |
我可以通过
完成此任务select f.type, (select count(id) from files where type = f.type), count(fp.id) from
files as f, file_properties as fp where f.id = fp.file_id group by f.type;
但这似乎非常不理想而且非常缓慢。有没有更好的方法呢?
答案 0 :(得分:1)
select type, count(*) as filecount, sum(pc.count) as [prop count]
from Files f
left outer join (
select file_id, count(*) as count
from Properties p
group by file_id
) pc on f.id = pc.file_id
group by type