每个id的唯一列的聚合计数

时间:2015-03-29 21:10:11

标签: sql count group-by aggregate

我需要一个可以聚合表中不同列的数据的查询。 我需要每个文件的不同person_ids的数量和每个文件的不同token_nrs的数量。

我目前正在使用以下查询:

SELECT file.id, COUNT(t1.person_id) FROM file JOIN 
(SELECT file_id, person_id FROM data GROUP BY file_id, person_id) 
t1 ON t1.file_id = file.ID GROUP BY file.id

SELECT file.id, COUNT(t1.token_tr) FROM file JOIN 
(SELECT file_id, token_nr FROM data GROUP BY file_id, token_nr) 
t1 ON t1.file_id = file.ID GROUP BY file.id

目前我对两个聚合执行查询,然后在python中组合行以获取[id,count(person_id),count(token)]。

在纯SQL中有更简单的方法吗?

表结构

 File
id  name
1   file1.txt
2   file2.txt

Data
id  file_id     person_id   token_nr
1   1           1           43
2   1           2           69  
3   1           1           55
4   2           1           44


Results
File.id     count(unique person_ids)    count(unique token_nrs)
1           2                           3
2           1                           1

1 个答案:

答案 0 :(得分:1)

您可以使用count(distinct column_name)获取每个文件ID的不同列值

select f.id, count(distinct person_id), count(distinct token_nr)
from file f 
join data d on f.id = d.file_id
group by f.id