sql >> Database teknologi >  >> RDS >> Sqlserver

Få det samlede antal rækker under personsøgning

Du behøver ikke at køre forespørgslen to gange.

SELECT ..., total_count = COUNT(*) OVER()
FROM ...
ORDER BY ...
OFFSET 120 ROWS
FETCH NEXT 10 ROWS ONLY;

Baseret på chatten , det ser ud til, at dit problem er lidt mere komplekst - du anvender DISTINCT til resultatet udover personsøgning. Dette kan gøre det kompliceret at bestemme præcist hvad COUNT() er skal se ud og hvor den skal gå hen. Her er en måde (jeg vil bare demonstrere dette i stedet for at prøve at inkorporere teknikken i din meget mere komplekse forespørgsel fra chat):

USE tempdb;
GO
CREATE TABLE dbo.PagingSample(id INT,name SYSNAME);

-- insert 20 rows, 10 x 2 duplicates
INSERT dbo.PagingSample SELECT TOP (10) [object_id], name FROM sys.all_columns;
INSERT dbo.PagingSample SELECT TOP (10) [object_id], name FROM sys.all_columns;

SELECT COUNT(*) FROM dbo.PagingSample; -- 20

SELECT COUNT(*) FROM (SELECT DISTINCT id, name FROM dbo.PagingSample) AS x; -- 10

SELECT DISTINCT id, name FROM dbo.PagingSample; -- 10 rows

SELECT DISTINCT id, name, COUNT(*) OVER() -- 20 (DISTINCT is not computed yet)
 FROM dbo.PagingSample
 ORDER BY id, name
 OFFSET (0) ROWS FETCH NEXT (5) ROWS ONLY; -- 5 rows

-- this returns 5 rows but shows the pre- and post-distinct counts:
SELECT PostDistinctCount = COUNT(*) OVER() -- 10, 
  PreDistinctCount -- 20, 
  id, name 
FROM 
(
  SELECT DISTINCT id, name, PreDistinctCount = COUNT(*) OVER() 
    FROM dbo.PagingSample
    -- INNER JOIN ...
) AS x
ORDER BY id, name
OFFSET (0) ROWS FETCH NEXT (5) ROWS ONLY;

Ryd op:

DROP TABLE dbo.PagingSample;
GO


  1. Indsættelse af json-kodede data i mysql

  2. mysql konvertering fra UTC til IST

  3. Mysql-forespørgselsproblem

  4. Sådan vælger du det seneste sæt af daterede poster fra en mysql-tabel