數據庫是Oracle。我有三列,A,B和C的單個表對於列A,B,C的SQL:按A組計算,B的計算份額等於每個A的C
- A是字符串列
- B是int列
- C是int列
我需要一個SQL選擇上的A基團,並返回份額(以百分數表示),其中B = C = [特定int值]爲A的每個值
喜歡的東西
SELECT A, percentBEqC
...
GROUP ON A
數據庫是Oracle。我有三列,A,B和C的單個表對於列A,B,C的SQL:按A組計算,B的計算份額等於每個A的C
我需要一個SQL選擇上的A基團,並返回份額(以百分數表示),其中B = C = [特定int值]爲A的每個值
喜歡的東西
SELECT A, percentBEqC
...
GROUP ON A
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
另一種方式:
..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,
「GROUP BY」,而不是'GROUP ON';) –
@OMGPonies:是的,沒錯。 –
CASE ...檢查。不知道那一個,謝謝 –
關於B = 256和C = 256更好的表現:這是沒有索引在特定的表,所以我認爲這並不重要(在這種情況下) –