Новые функции агрегирования
- 4 мин
При внедрении APPROX_PERCENTILE_DISC
и APPROX_PERCENTILE_CONT
в SQL Server 2022 корпорация Майкрософт решает проблему эффективного вычисления процентилей в больших наборах данных при допустимом приближении. Эти функции обеспечивают более быстрое выполнение запросов и снижение потребления памяти, что позволяет пользователям эффективно изучать распределение данных и получать ценные аналитические сведения без снижения производительности системы.
APPROX_PERCENTILE_DISC
Эта функция вычисляет приблизительное значение по заданному процентильу в наборе данных, возвращая ближайшую существующую точку данных.
APPROX_PERCENTILE_CONT
Эта функция вычисляет приблизительное значение по указанному процентиле, интерполяируя между точками данных при необходимости.
Повышение производительности запросов большого набора данных с помощью APPROX_PERCENTILE_DISC и APPROX_PERCENTILE_CONT
Интернет-компания хочет проанализировать данные о продажах, чтобы лучше понять шаблоны расходов клиентов и оптимизировать свою стратегию ценообразования. Они хотели бы определить 90-й процентиль цен на товары, продающиеся в каждой категории, что даст им представление о том, как высококачественные товары оцениваются в сравнении с большинством остальных товаров.
Используя функции APPROX_PERCENTILE_DISC
и APPROX_PERCENTILE_CONT
, компания может эффективно вычислить 90-й процентиль цен на продукты в каждой категории. Дискретная функция предоставляет точное значение цены, ближайшее к требуемому процентиле, а непрерывная функция интерполяется между ценами, чтобы обеспечить более точную оценку. Эта информация может помочь компании принимать обоснованные решения по корректировкам цен и управлению инвентаризацией для удовлетворения предпочтений клиентов и повышения продаж.
WITH ProductSalesByCategory AS (
SELECT p.ProductID, p.Name AS ProductName, c.Name AS CategoryName, sod.UnitPrice
FROM AdventureWorks2012.Sales.SalesOrderDetail AS sod
JOIN AdventureWorks2012.Production.Product AS p ON sod.ProductID = p.ProductID
JOIN AdventureWorks2012.Production.ProductSubcategory AS sc ON p.ProductSubcategoryID = sc.ProductSubcategoryID
JOIN AdventureWorks2012.Production.ProductCategory AS c ON sc.ProductCategoryID = c.ProductCategoryID
)
SELECT CategoryName,
ROUND(APPROX_PERCENTILE_DISC(0.9) WITHIN GROUP (ORDER BY UnitPrice), 2) AS UnitPrice90thPercentile_DISC,
ROUND(APPROX_PERCENTILE_CONT(0.9) WITHIN GROUP (ORDER BY UnitPrice), 2) AS UnitPrice90thPercentile_CONT
FROM ProductSalesByCategory
GROUP BY CategoryName
ORDER BY CategoryName;
Результаты:
Имя категории | 90-й процентиль цены за единицу_DISC | ЦенаЗаЕдиницу90йПерцентиль_CONT |
---|---|---|
Принадлежности | 34.99 | 34.99 |
Велосипеды | 2384.07 | 2384.07 |
Одежда | 53.99 | 53.99 |
Компоненты | 744.27 | 744.27 |