我有一个带有状态栏的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中遍历整个表一次来做到这一点?
答案 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提供的另一种解决方案将执行三个查询,如果该表具有索引,则该解决方案可能比此查询(全表扫描)更快。