簡體   English   中英

在Access SQL中獲得全部百分比

[英]Get a percentage of all in Access SQL

我有一個表,其中包含將由給定的團隊針對給定的版本實現的功能列表,並帶有一個標志,告訴我該功能是否可測試。

樣本數據可以是:

feature   team         rel       testable
1           1           1            1
2           1           1            1
3           1           1            1
4           1           2            1
5           1           2            1
6           1           2            0
7           1           3            0
8           1           3            0
9           1           3            1
10          2           1            0
11          2           1            0
12          2           1            0
13          2           2            1
14          2           2            0
15          2           2            0
16          2           3            1
17          2           3            1
18          2           3            0

我想要獲得的是,對於每個團隊和每個發行版,可測試功能的百分比是多少(占該團隊和發行版的功能總數)。

理想情況下,由於我設計了結果顯示的方式,因此我希望將其保留為單個SQL查詢。

我走到了這一步:

SELECT 
    MyTable.team AS team, 
    MyTable.rel AS rel,
    (COUNT(*)*100 / (
        SELECT COUNT(*) 
        FROM MyTable 
        WHERE 
            [MyTable].team = team 
            AND [MyTable].rel = rel
        )
    ) AS result
FROM MyTable 
WHERE 
    MyTable.team IN (1,2) 
    AND MyTable.rel IN (1,2,3) 
    AND MyTable.testable = 1 
GROUP BY 
    MyTable.rel, 
    MyTable.team 
ORDER BY 
    MyTable.team, 
    MyTable.rel

這是我期望的結果(我不太在乎四舍五入)

team    rel   result
1        1      1      // all are testable for team 1 release 1
1        2     0.66    // 2 out of 3 are testable for team 1 release 2
1        3     0.33
2        1      0
2        2     0.33
2        3     0.66

我的感覺是我離解決方案不遠,但是我無法解決它。

我認為這里可以使用一個簡單的平均函數; 假設可測試字段中的所有值均為1或0。

哦,在where子句中刪除testable = 1

我不確定訪問是否會隱式轉換為Boolean ...,因此這將通過將值顯式轉換為1,0來使avg正常工作。

SELECT 
    MyTable.team AS team, 
    MyTable.rel AS rel,
    AVG(iif(Testable,1,0)) AS result
FROM MyTable 
WHERE 
    MyTable.team IN (1,2) 
    AND MyTable.rel IN (1,2,3) 
GROUP BY 
    MyTable.rel, 
    MyTable.team 
ORDER BY 
    MyTable.team, 
    MyTable.rel
select y.team, y.rel, x.cnt/y.tot as res
from (
select t.team, t.rel, sum(x.cnt) as tot
from (
select team, rel, testable, count(*) as cnt
from table where team in (1,2) and rel in (1,2,3)
group by team, rel, testable) x
join table t on t.team = x.team and t.rel = x.rel
group by team, rel) y

你可以試試看

暫無
暫無

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

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