簡體   English   中英

SQL分組

[英]SQL 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。

我喜歡分步驟工作:首先清除重復的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

我實際上已經測試過:

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        

看一下這個。 盡管我尚未對其進行測試,但這應該可以在Oracle中使用。

select count(a), BB, CC from
(
select a, max(B) BB, Max(C) CC
from yourtable
group by a
)
group by BB,CC
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];

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM