2017-06-20 24 views
0

這是我嘗試acheieve(寫在imaginery SQL):集團具有clearification

SELECT A, B, C, AVG( `Value`) AS Value 
FROM T 
GROUP BY A, B, C 
HAVING AT LEAST TWO DIFFRENT C VALUES PER DISTINCT A,B 
ORDER BY A, B, C 

是否有可能改寫正確的MySQL這樣的HAVING條件?

起初我以爲這會工作:

SELECT A, B, C, AVG( `Value`) AS Value 
    FROM T 
    GROUP BY A, B, C 
    HAVING COUNT(C)>2 
    ORDER BY A, B, C 

但由於爲同A,B,C組合其不可能2不同勢C值它不,那​​麼你會怎麼做呢?

+0

請出示例如輸入和輸出數據。 – CBroe

+0

但是如果你想要「不同的C」,那麼你可能不希望在你的分組中包含C首先 - 因爲A,B,C的分組意味着「1,2,X」和「1,2, Y'會以不同的組開始。 – CBroe

回答

2

您可以將您的查詢分爲兩個不同的查詢:

  1. 有每個不同的至少兩種不同的C值,B

    select A, B 
    from T 
    group by A, B 
    having count(DISTINCT C)>1 
    
  2. 您的最終查詢

    select A, B, C, avg(Value) 
    from T 
    where 
        (A, B) in (
        select A, B 
        from T 
        group by A, B 
        having count(DISTINCT C)>1 
    ) 
    group by 
        A, B, C 
    
1

你可以嘗試使用WHERE聲明,而不是HAVING

SELECT A, B, C, AVG( `Value`) AS Value 
FROM T 
WHERE 
    (
    SELECT COUNT(DISTINCT C) 
    FROM T1 
    WHERE T1.A = T.A AND T1.B = T.B 
    ) >= 2 
GROUP BY A, B, C 
ORDER BY A, B, C