让我们考虑一下这个例子:
Employee Function Start_dept End_dept
A dev 10 13
A dev 11 12
A test 9 9
A dev 13 11
我要选择的是员工、他们的职能以及“开始”和“结束”部门中的不同部门。结果如下:
Employee Function count_distinct_dept
A dev 4
A test 1 `
对于deva,我们只有4个不同的部门(10、11、12和13),因为我们不应该在2列(start和end)中计算重复值。
我该怎么做(我正在使用mysql)。有没有可能在没有任何加入或联合的情况下,一个请求就可以做到这一点?还是必须使用其中一个?因为我使用的是一个巨大的数据库(超过30亿行),所以我不确定加入或联合请求是否是最佳的。。。
1条答案
按热度按时间zed5wv101#
使用
union all
和聚合:如果你想要性能,我建议从两个索引开始
(Employee, Function, Start_Dept)
以及(Employee, Function, End_Dept)
. 然后:子查询应该扫描索引而不是整个表。你仍然需要做最后的决定
GROUP BY
. 我猜是的COUNT(DISTINCT)
是一种比UNION
在子查询中,但您可以测试它。