Published on

October 5, 2019

Понимание упорядочивания Group By в SQL Server

Основы SQL Server никогда не устареют. Сегодня мы обсудим интересную концепцию, связанную с оператором GROUP BY в SQL Server.

Недавно, работая с клиентом над комплексной проверкой производительности базы данных, один администратор баз данных задал мне вопрос о поведении оператора GROUP BY. Администратор прочитал одну из моих старых статей в блоге под названием “Как узнать, применяется ли индекс к запросу?” и хотел понять, почему свойство “Упорядочено” отображается как True в плане выполнения запроса, даже если в запросе не используется оператор ORDER BY.

Ответ на этот вопрос довольно прост. Когда мы используем оператор GROUP BY в SQL Server, данные автоматически упорядочиваются по столбцам, указанным в операторе GROUP BY, в порядке возрастания, независимо от исходного порядка таблицы. Это поведение согласовано в SQL Server и многих других системах управления реляционными базами данных (СУБД).

Давайте рассмотрим пример с использованием образца базы данных WideWorldImports:

USE WideWorldImports
GO
SELECT ContactPersonID, COUNT(OrderID) TotalCount
FROM [Sales].[Orders]
GROUP BY ContactPersonID
GO

При выполнении этого запроса мы можем наблюдать, что исходная таблица не имеет определенного порядка для столбца ContactPersonID. Однако, когда мы используем оператор GROUP BY, результат автоматически упорядочивается по столбцу ContactPersonID.

Это поведение не ограничивается SQL Server. Если вы работаете с MySQL, MariaDB, PostgreSQL или другими СУБД, вы также обнаружите такое же поведение.

Меня удивило, что многие люди не были осведомлены об этой функции. Если вы уже знали об этом поведении, пожалуйста, оставьте комментарий и дайте мне знать. Если у вас есть другие интересные трюки или концепции, связанные с SQL Server, я с удовольствием опубликую их в блоге с указанием вашего имени.

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.