我有一个查询,将 Count(*( 作为顺序,接下来是偏移量提取。当我使用不同的值作为偏移量时,它总是提供相同的结果集。
我尝试按结果集变化的顺序使用一些列,它工作得很好。有人可以帮忙吗?
select
Id,
count(*) as "Count"
from
some_table
group by
"Id"
Order By
"Count" ASC OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;
截图 1 截图 2
这是您的查询:
select Id, count(*) as "Count"
from some_table
group by "Id"
order by "Count" asc
OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY;
问题是您有重复的值count(*)
. 由于 SQL 表表示无序集,因此它没有默认排序。 当排序键具有相同的值时,这会带来问题。
简单的解决方案是在order by
中包含id
:
order by "Count" asc, id
这使得排序稳定,因此它是明确定义的。
这里是我的例子
-
创建表
create table t (id int, name varchar(100))
-
插入数据的
insert into t values(1,'saravnan') insert into t values(1,'kumar') insert into t values(1,'Ravi') insert into t values(1,'mohan') insert into t values(2,'Raju') insert into t values(2,'Vikram') insert into t values(2,'AA') insert into t values(2,'BB') insert into t values(2,'CC') insert into t values(2,'DD') insert into t values(2,'EE') insert into t values(3,'Raju') insert into t values(3,'Vikram') insert into t values(3,'AA') insert into t values(4,'BB') insert into t values(4,'CC') insert into t values(4,'DD') insert into t values(4,'EE')
-
选择所有数据
select *from t id name 1 1 saravnan 2 1 kumar 3 1 Ravi 4 1 mohan 5 2 Raju 6 2 Vikram 7 2 AA 8 2 BB 9 2 CC 10 2 DD 11 2 EE 12 3 Raju 13 3 Vikram 14 3 AA 15 4 BB 16 4 CC 17 4 DD 18 4 EE
-
偏移量用于从表数据开头跳过的行数。 它应该是数字。 这是我的例子:
select id,count(*) from t group by id order by id offset 1 rows fetch next 3 row only
它返回
id count 1 2 7 2 3 3 3 4 4
-
接下来用于返回数字行的提取。 您的示例的解决方案。
--offset 0 returns[enter image description here][1] select Id,count(1) as "Count" from t group by ID Order By "Count" ASC OFFSET 0 ROWS FETCH NEXT 5 ROWS ONLY Id Count 1 3 3 2 4 4 3 1 4 4 2 7 -- offset 1 returns select Id,count(1) as "Count" from t group by ID Order By "Count" ASC OFFSET 1 ROWS FETCH NEXT 5 ROWS ONLY Id Count 1 4 4 2 1 4 3 2 7