كيفية استرداد إجمالي عدد الصفوف استعلام مع TOP
-
03-07-2019 - |
سؤال
ولدي SQL سيرفر 2008 الاستعلام
SELECT TOP 10 *
FROM T
WHERE ...
ORDER BY ...
وكنت ترغب في الحصول على أيضا على عدد من الصفوف. الطريق obious هو جعل استعلام الثاني
SELECT COUNT(*)
FROM T
WHERE ...
ORDER BY ...
هل هناك وسيلة فعالة؟
والشكر
المحلول
هل تريد الاستعلام الثاني؟
SELECT TOP 10
*, foo.bar
FROM
T
CROSS JOIN
(SELECT COUNT(*) AS bar FROM T WHERE ...) foo
WHERE
...
ORDER BY
...
وOR
DECLARE @bar int
SELECT @bar = COUNT(*) AS bar FROM T WHERE ...
SELECT TOP 10
*, @bar
FROM
T
CROSS JOIN
(SELECT COUNT(*) AS bar FROM T WHERE ...) foo
WHERE
...
ORDER BY
...
وأو (تحرير: استخدام مع)
WITH cTotal AS
(
SELECT COUNT(*) AS bar FROM T WHERE ...)
)
SELECT TOP 10
*, cTotal .bar
FROM
T
WHERE
...
ORDER BY
...
نصائح أخرى
ما هو في هذه الإجابة يبدو للعمل:
https://stackoverflow.com/a/19125458/16241
وأساسا كنت تفعل:
SELECT top 100 YourColumns, TotalCount = Count(*) Over()
From YourTable
Where SomeValue = 32
وTOTALCOUNT سيكون إجمالي عدد الصفوف. وهي مدرجة في كل صف على الرغم من.
عند اختبرت أظهرت هذه الخطة الاستعلام الجدول فقط يتم ضرب مرة واحدة.
وإزالة جملة ORDER BY من الاستعلام 2ND كذلك.
لا.
وSQL Server
لا تبقي COUNT(*)
في الفوقية مثل MyISAM
، فإنه يحسب في كل مرة.
<القوي> UPDATE: إذا كنت بحاجة إلى تقدير، يمكنك استخدام الإحصاءات الفوقية:
SELECT rows
FROM dbo.sysindexes
WHERE name = @primary_key,
وحيث @primary_key
هو اسم المفتاح الأساسي الجدول الخاص بك.
وهذا سيعود COUNT(*)
من تحديث إحصاءات الماضي.
SELECT TOP (2) *,
(SELECT COUNT(*) AS Expr1 FROM T) AS C
FROM T