我需要一个可以聚合表中不同列的数据的查询。 我需要每个文件的不同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
答案 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