我有一个名为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,这只能给我一个正确的计数。
非常感谢任何帮助。 感谢
答案 0 :(得分:0)
评论有点长。首先观察一下,order by
子句是完全没必要的,因为你只返回一行(count(*)
)。
其次,如果行仅由colA
和colB
的组合唯一标识,则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;
希望这会有所帮助。