Sql:来自两个表的同时聚合

时间:2010-05-31 11:54:49

标签: sql aggregate

我有两个表:一个包含文件类型的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;

但这似乎非常不理想而且非常缓慢。有没有更好的方法呢?

1 个答案:

答案 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