gpt4 book ai didi

mysql - 在 SQL 上对两列进行不同计数

转载 作者:搜寻专家 更新时间:2023-10-30 22:25:12 25 4
gpt4 key购买 nike

让我们考虑这个例子:

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 `

对于开发人员 A,我们只有 4 个不同的部门(10、11、12 和 13),因为我们不应该计算 2 列(开始和结束)中的重复值。

我该怎么做? (我正在使用 mySQL)。是否可以在没有任何 JOIN 或任何 UNION 的情况下根据一个请求执行此操作?还是必须使用其中之一?由于我使用的是一个巨大的数据库(超过 30 亿行),我不确定加入或合并请求是否是最佳的...

最佳答案

使用union all 和聚合:

select Employee, Function, count(distinct dept)
from ((select Employee, Function, Start_dept as dept
from e
) union all
(select Employee, Function, End_dept
from e
)
) e
group by Employee, Function;

如果您想要性能,我建议从 (Employee, Function, Start_Dept)(Employee, Function, End_Dept) 两个索引开始。然后:

select Employee, Function, count(distinct dept)
from ((select distinct Employee, Function, Start_dept as dept
from e
) union all
(select distinct Employee, Function, End_dept
from e
)
) e
group by Employee, Function;

子查询应该扫描索引而不是整个表。您仍然需要执行最后的 GROUP BY。我猜测 COUNT(DISTINCT) 是比子查询中的 UNION 更好的方法,但您可以对其进行测试。

关于mysql - 在 SQL 上对两列进行不同计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53582155/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com