Published on

December 23, 2014

Понимание COUNT() в SQL Server

При работе с SQL Server важно понимать, как работает функция COUNT() и как она может влиять на результаты запроса. В частности, использование COUNT(*) по сравнению с COUNT(имя_столбца) может давать разные результаты, особенно при работе с NULL значениями.

Давайте рассмотрим пример, чтобы проиллюстрировать эту концепцию:

SET ANSI_NULLS ON;
SET QUOTED_IDENTIFIER ON;

IF EXISTS (SELECT object_id
           FROM sys.objects
           WHERE object_id = OBJECT_ID(N'[dbo].[CountTest]')
            AND type in (N'U')
          )
 DROP TABLE [CountTest];

CREATE TABLE [CountTest](
      [Name] [nvarchar](max)
);

INSERT INTO [CountTest] ([Name]) VALUES('Sally');
INSERT INTO [CountTest] ([Name]) VALUES(NULL);
INSERT INTO [CountTest] ([Name]) VALUES('Mary');
INSERT INTO [CountTest] ([Name]) VALUES('Jane');
INSERT INTO [CountTest] ([Name]) VALUES(NULL);
INSERT INTO [CountTest] ([Name]) VALUES('Bob');
INSERT INTO [CountTest] ([Name]) VALUES('Tom');
INSERT INTO [CountTest] ([Name]) VALUES(NULL);

-- Теперь мы считаем
SELECT COUNT(1)      AS [COUNT(1) Должно быть 8]    FROM [CountTest];
SELECT COUNT([Name]) AS [COUNT(Name) Не будет 8]  FROM [CountTest];
SELECT COUNT(*)      AS [COUNT(*) Это тоже 8]  FROM [CountTest];
SELECT [Name] FROM [CountTest]; -- должны увидеть 8 строк

DROP TABLE [CountTest];

В этом примере мы создаем таблицу с именем “CountTest” с одним столбцом “Name”. Мы вставляем несколько строк, включая некоторые NULL значения. Затем мы выполняем три разных запроса COUNT(), чтобы увидеть различия в результатах.

Первый запрос, COUNT(1), возвращает ожидаемый результат 8. Это потому, что мы считаем количество строк, независимо от значений в столбце “Name”.

Второй запрос, COUNT([Name]), может давать неожиданные результаты. Он считает только ненулевые значения в столбце “Name”. В этом случае он вернет количество 5, исключая NULL значения.

Третий запрос, COUNT(*), аналогичен COUNT(1) и возвращает ожидаемый результат 8. Это потому, что * представляет все столбцы в таблице, включая NULL значения.

Важно знать об этих различиях при использовании функции COUNT() в ваших запросах SQL Server. В зависимости от ваших требований, вам может потребоваться использовать COUNT(1) или COUNT(*), чтобы получить точные результаты.

Не забывайте всегда тестировать ваши запросы и быть внимательными к данным, с которыми вы работаете, чтобы избежать неожиданных результатов.

Click to rate this post!
[Total: 0 Average: 0]

Let's work together

Send us a message or book free introductory meeting with us using button below.