Группировка SQL - PullRequest
       21

Группировка SQL

0 голосов
/ 21 ноября 2008

У меня есть таблица со следующими столбцами:


A   B   C
---------
1   10  X
1   11  X
2   15  X
3   20  Y
4   15  Y
4   20  Y

Я хочу сгруппировать данные на основе столбцов B и C и посчитать различные значения столбца A. Но если есть еще две строки, в которых значение столбца A одинаково, я хочу получить максимальное значение из столбца B.

Если я сделаю простую группу, результатом будет:


B   C    Count
--------------
10  X    1
11  X    1
15  X    1
20  Y    2
15  Y    1

Что я хочу, так это результат:


B   C    Count
--------------
11  X    1
15  X    1
20  Y    2

Есть ли запрос, который может вернуть этот результат. Сервер SQL Server 2005.

Ответы [ 4 ]

2 голосов
/ 21 ноября 2008

Мне нравится работать поэтапно: сначала избавьтесь от дубликатов записей А, затем группируйте. Не самый эффективный, но он работает на вашем примере.

with t1 as (
    select A, max(B) as B, C 
        from YourTable
        group by A, C
)
select count(A) as CountA, B, C
    from t1
    group by B, C
2 голосов
/ 21 ноября 2008

Я действительно проверял это:

SELECT 
    MAX( B ) AS B,
    C,
    Count 
FROM
(
    SELECT
        B, C, COUNT(DISTINCT A) AS Count
    FROM
        t
    GROUP BY
    B, C
) X
GROUP BY C, Count

и это дает мне:

 B     C     Count    
 ----  ----  -------- 
 15    X     1        
 15    y     1        
 20    y     2        
0 голосов
/ 21 ноября 2008
WITH cteA AS 
(
    SELECT 
        A, C, 
        MAX(B) OVER(PARTITION BY A, C) [Max]
    FROM T1
)

SELECT 
    [Max] AS B, C, 
    COUNT(DISTINCT A) AS [Count]
FROM cteA
GROUP BY C, [Max];
0 голосов
/ 21 ноября 2008

Проверьте это. Это должно работать в Oracle, хотя я не проверял это;

select count(a), BB, CC from
(
select a, max(B) BB, Max(C) CC
from yourtable
group by a
)
group by BB,CC
...