代码之家  ›  专栏  ›  技术社区  ›  Albert

SQL分组

  •  0
  • Albert  · 技术社区  · 15 年前

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

    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 回复  |  直到 10 年前
        1
  •  2
  •   Tiberiu Ana    15 年前

    我喜欢分步骤工作:先去掉重复的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
    
        2
  •  2
  •   Kris    15 年前

    我已经测试过了:

    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        
    
        3
  •  0
  •   Thuglife    15 年前
    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];
    
        4
  •  0
  •   Matt John Wright    10 年前

    看看这个。这应该在Oracle中有效,尽管我没有测试过它;

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