2011-10-09 86 views

回答

3
SELECT A 
    , COUNT(CASE WHEN B = C AND C = 256 
        THEN 1 
       END 
      ) 
    /COUNT(*) AS percentBEqC 
FROM YourTable 
GROUP BY A 

您可能想要檢查B = 256 AND C = 256是否有更好的性能。


你的問題的另一種方法是:

SELECT ta.A 
    , COALESCE(cnt,0)/cntAll AS percentBEqC 
FROM 
    (SELECT A 
      , COUNT(*) AS cntAll 
     FROM YourTable 
     GROUP BY A 
    ) ta 
    LEFT JOIN 
    (SELECT A 
      , COUNT(*) AS cnt 
     FROM YourTable 
     WHERE B = 256 AND C = 256 
     GROUP BY A 
    ) ts 
    ON ts.A = ta.A 
+0

CASE ...檢查。不知道那一個,謝謝 –

+0

關於B = 256和C = 256更好的表現:這是沒有索引在特定的表,所以我認爲這並不重要(在這種情況下) –

1

另一種方式:
..once語法是正確的;/

SELECT A, (COUNT(*)/(SELECT COUNT(*) FROM mytbl b WHERE b.A = a.A)) AS percentBEqC 
    FROM mytbl a 
WHERE B = particular_value 
    AND C = particular_value 
GROUP BY A; 

只返回行,其中percentBEqC > 0,

+0

「GROUP BY」,而不是'GROUP ON';) –

+0

@OMGPonies:是的,沒錯。 –

相關問題