Sql 如何编写一个分页、排序的查询,该查询还返回组bucket
尝试编写一个查询,该查询返回分页/排序的结果,该结果在bucket中也有分组,如下所示: 0-9999910000-999999100000-9999991000000-4999999950000000+ 每个人都应该有一个startIndex,当他们点击它时可以跳转到哪里 下面是加载此数据的示例查询。用户将在页面底部看到这些组,但它们取决于所排序的列。单击这些组中的一个,然后将用户跳转到该页面和索引。在我的例子中,有更多的列,但我认为分组可以归结为字符串、数字或日期时间。对于字符串,UI希望字母表中的每个字母都是一个组,但只希望包含数据的字母。对于其他所有内容,应该有大约5或6个桶 有人知道怎么做吗? 这叫什么?在网上找不到任何东西,但我甚至不知道该找什么Sql 如何编写一个分页、排序的查询,该查询还返回组bucket,sql,group-by,bucket-sort,Sql,Group By,Bucket Sort,尝试编写一个查询,该查询返回分页/排序的结果,该结果在bucket中也有分组,如下所示: 0-9999910000-999999100000-9999991000000-4999999950000000+ 每个人都应该有一个startIndex,当他们点击它时可以跳转到哪里 下面是加载此数据的示例查询。用户将在页面底部看到这些组,但它们取决于所排序的列。单击这些组中的一个,然后将用户跳转到该页面和索引。在我的例子中,有更多的列,但我认为分组可以归结为字符串、数字或日期时间。对于字符串,UI希望字
declare @startIndex int
declare @pageSize int
declare @Names table
(
FirstName varchar(100),
LastName varchar(100),
Age int,
NetWorth money
)
select @startIndex = 1
select @pageSize = 10
insert into @Names (FirstName, LastName, Age, NetWorth) values ('John', 'Smith', 24, 304050)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('John', 'Williams', 31, 430901)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Adam', 'Wilson', 29, 121000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Jen', 'Phillips', 75, 1450000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Tommy', 'John', 33, 99000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Alex', 'Smith', 48, 12800000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Dianne', 'Lane', 60, 94000000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Charles', 'Barkley', 46, 21500000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Will', 'Allen', 21, 4000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Michael', 'Jordan', 50, 94500000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Jenny', 'Block', 43, 509000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Oprah', 'Winfrey', 61, 55000000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Charles', 'Smith',50, 3400000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('LeBron', 'James', 29, 74678000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Chris', 'Paul', 30, 19400000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Kobe', 'Bryant', 38, 124600000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Antonio', 'Gates', 36, 17040190)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Tony', 'Romo', 35, 28403400)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Nancy', 'Cammo', 44, 167880)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Bill', 'Brown', 45, 98000)
insert into @Names (FirstName, LastName, Age, NetWorth) values ('Paul', 'Jones', 26, 987900);
WITH SearchResults AS
(
SELECT
'RowNum' = ROW_NUMBER() over(ORDER BY NetWorth asc)
,Age
,NetWorth
,FirstName
,LastName
FROM @Names
group by Age, NetWorth, FirstName, LastName
),
counts as (
select 'TotalRows' = count(*) from @Names
),
maxvalue as (
select 'Val' = max(NetWorth) from @Names
)
SELECT sr.RowNum
,sr.FirstName
,sr.LastName
,sr.Age
,sr.NetWorth
,'TotalRows' = c.TotalRows
,'MaxValue' = mv.Val
FROM SearchResults sr
cross apply counts c
cross apply maxvalue mv
WHERE sr.RowNum BETWEEN @startIndex AND @pageSize - @startIndex + 1
/*
select NetWorth,
count(NetWorth)
from @Names
group by NetWorth
order by NetWorth
*/
任何帮助都将不胜感激。这里有一个尝试,我手边没有sql server(我假设您正在使用),因此您可能需要稍微调整查询:
select * from (
select ROW_NUMBER() over(ORDER BY NetWorth asc) as rn
, Age, NetWorth, FirstName, LastName
, count(*) over () as totalrows
, max(networth) over () as max_value
from names
) as t
where rn between 1 and 10;