每个 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
我需要一个可以聚合 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