SQL分组

时间:2008-11-21 10:17:16

标签: sql sql-server sql-server-2005 grouping

我有一个包含以下列的表:


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 个答案:

答案 0 :(得分:2)

我喜欢分步工作:首先摆脱重复的A记录,然后分组。不是最有效的,但它适用于你的例子。

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

答案 1 :(得分:2)

我实际测试了这个:

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        

答案 2 :(得分:0)

检查一下。这应该在Oracle中有效,尽管我还没有测试过它;

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

答案 3 :(得分:0)

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];