0

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

美国广播公司
---------
1 10 X
1 11 X
2 15 X
3 20 岁
4 15 是
4 20 岁

我想根据 B 和 C 列对数据进行分组,并计算 A 列的不同值。但是如果有两行或更多行 A 列上的值相同,我想从 B 列中获取最大值。

如果我按结果做一个简单的分组将是:

BC计数
--------------
10×1
11×1
15×1
20 是 2
15 是 1

我想要的是这个结果:

BC计数
--------------
11×1
15×1
20 是 2

是否有任何查询可以返回此结果。服务器是 SQL Server 2005。

4

4 回答 4

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
于 2008-11-21T10:43:06.153 回答
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        
于 2008-11-21T10:44:46.633 回答
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
于 2008-11-21T10:41:07.840 回答
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];
于 2008-11-21T11:04:50.600 回答