如何在jdbc中仅一次遍历mysql表以构建计数图?

时间:2018-10-31 18:06:33

标签: mysql jdbc

我有一个带有状态栏的mysql表。每行可以具有不同的状态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中遍历整个表一次来做到这一点?

1 个答案:

答案 0 :(得分:1)

此查询仅对表运行一次,并产生所有三个计数。

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提供的另一种解决方案将执行三个查询,如果该表具有索引,则该解决方案可能比此查询(全表扫描)更快。