我有一个包含以下列的表:
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。
答案 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];