得到2个已知行之间的计数

时间:2013-12-17 01:57:58

标签: sql sqlite

我有一个名为Table1的表,它有2列colA,其中包含int和colB,其中包含字符串。

colA具有重复值。 colA和colB一起使行独特。

我想找到colA排序的2行之间的行数。 我有2行的所有细节。

以下是我所拥有的sql,其中起始行的colA值为10,结束行的colA值为100:

select count(*) from Table1 where colA > 10 AND colA <= 100 ORDER BY colA ASC

但是如果colA只有一个10,这只能给我一个正确的计数。

非常感谢任何帮助。 感谢

3 个答案:

答案 0 :(得分:0)

评论有点长。首先观察一下,order by子句是完全没必要的,因为你只返回一行(count(*))。

其次,如果行仅由colAcolB的组合唯一标识,则ColA的两个值之间的行没有一致的定义。考虑:

9      B0
10     B1
10     B2
20     B3
100    B4
100    B5
101    B6

“10”和“100”之间的行数是否恰好为1(B3)?在您的查询中正好3(B3,B4和B4))?正好是5,从第一个“10”到最后一个“100”?

你的问题陈述含糊不清。除了order by之外,您的查询与符合您定义的任何其他尝试一样好。

答案 1 :(得分:0)

如果您想要唯一的colA,那么您可以在sqlite中使用COUNT(DISTINCT fieldName),例如:

SELECT count(DISTINCT colA) 
FROM Table1 
WHERE colA > 10 AND colA <= 100

答案 2 :(得分:0)

首先进行一些数据准备

   create table TEST
(
    A int,
    B varchar(10)
);

insert into TEST (A,B) values 
(9,'B0');
insert into TEST (A,B) values 
(10,'B1');
insert into TEST (A,B) values 
(10,'B2');
insert into TEST (A,B) values 
(20,'B3');
insert into TEST (A,B) values 
(100,'B4');
insert into TEST (A,B) values 
(100,'B5');
insert into TEST (A,B) values 
(101,'B6');

实际上,我提出了更简单的解决方案。重要的是,如果你想数数 (FROM,TO)或或 如果colA = FROM没有值,或者colB = TO没有值,如何处理, 但是:

select count(1) +
       coalesce((select  1 from TEST where A = 10 limit 1),0) +
       coalesce((select  1 from TEST where A = 100 limit 1),0) 
 from TEST where A > 10 and A < 100;

希望这会有所帮助。