понедельник, 18 марта 2013 г.

Что делает группировка GROUP BY логически


-- 1. Находит уникальный набор значений по столбцу (столбцам) определенным в GROUP BY.
-- Например: Выведем список уникальных значений ProductLine (Товарная линейка)
SELECT
     ProductLine AS "Товарная линейка"
FROM
    AdventureWorks2012.Production.Product
GROUP BY
    ProductLine

-- 2. Для каждого значения вычисляется агрегированный результат.
-- Например: вычислим максимальное значение цены -
-- MAX(ListPrice) для каждой ProductLine (Товарная линейка) 
-- и объединим в один набор с помощью UNION ALL
SELECT
    'M' AS "Товарная линейка"
    ,MAX(ListPrice) AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
WHERE ProductLine = 'M'
         UNION ALL
SELECT
    'S' AS "Товарная линейка"
    ,MAX(ListPrice) AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
WHERE ProductLine = 'S'
    UNION ALL
SELECT
    'T' AS "Товарная линейка"
    ,MAX(ListPrice) AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
WHERE ProductLine = 'T'
    UNION ALL
SELECT
    'R' AS "Товарная линейка"
    ,MAX(ListPrice) AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
WHERE ProductLine = 'T'
    UNION ALL
SELECT
    NULL AS "Товарная линейка"
    ,MAX(ListPrice) AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
WHERE ProductLine IS NULL

-- А теперь тоже с помощью GROUP BY
SELECT
    ProductLine
         AS "Товарная линейка"
    ,MAX(ListPrice)
         AS "Максимальное значение цены"
FROM
    AdventureWorks2012.Production.Product
GROUP BY ProductLine