如何在jdbc中只遍历一次mysql表来构建计数映射



我有一个mysql表,其中有一个名为state的列。每一行可以具有不同的状态s1、s2或s3。

任务是构建状态发生的映射。这样做的一种方法是构建以下查询字符串:

select count(*) from NameOfTable where NameOfTable.state = "s1";
select count(*) from NameOfTable where NameOfTable.state = "s2";
select count(*) from NameOfTable where NameOfTable.state = "s3";

然后执行它们。

但是这种方法在整个表中迭代3次。有办法吗只需在jdbc中遍历整个表一次就可以做到这一点吗?

此查询只在表上运行一次,并生成所有三个计数。

select
sum(case when state = 's1' then 1 end) as c1,
sum(case when state = 's2' then 1 end) as c2,
sum(case when state = 's3' then 1 end) as c3
from NameOfTable

然而,你为什么只想看一次桌子?速度、资源消耗、I/O?你的限制似乎是人为的。

@Loc给出的替代解决方案执行三个查询,如果表有索引,则可能比这一个更快(Full Table Scan(。

最新更新