SQL中不同行的计数

时间:2016-11-22 23:43:39

标签: sql sql-server tsql

我想从表中选择不同行(每页)的固定大小+所有行的计数(每个查询)。我的查询没有计算所有行:

select distinct takenBookTitle, user from Books
where user = 'username'
order by takenBookTitle
offset 0 rows fetch next 3 rows only

但是有了这个结果,我需要检索所有行的计数(没有偏移..获取)。

如果没有必要,可以使用 count(*)OVER()

select takenBookTitle, user, count(*) OVER() AS count 
from Books
where user = 'username'
order by takenBookTitle offset 0 rows fetch next 3 rows only

结果:

BookTitle1  userName1   10
BookTitle2  userName2   10
BookTitle3  userName3   10

但我想计算不同行,但 计数()OVER()* 不允许。

1 个答案:

答案 0 :(得分:0)

您可以使用相同的约束(where子句)计算另一个查询中的count并交叉连接到它,因为它只包含一行,因此相应的信息将相应地附加到每一行:

select
  t.*, g.cnt
from (
  select distinct takenBookTitle, user from Books
  where user = 'username'
  order by user offset 0 rows fetch next 3 rows only
  ) t
cross join (
  select count(*) as cnt
  from Books
  where user = 'username'
  ) g

我想知道为什么你按user排序,如果你的where子句只指定了一个,但你可能正在使用多个用户并向我们展示简化查询。如果没有,那个顺序似乎没必要