Основы 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, я с удовольствием опубликую их в блоге с указанием вашего имени.