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

Aggregate count for unique columns per id

我需要一个可以聚合 table 中不同列的数据的查询。 我需要每个文件的不同 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 中是否有更简单的方法来做到这一点?

Table 结构

 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

您可以使用 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