2011-05-30 90 views
1
SELECT User, COUNT(*) as count FROM Tests WHERE Release = '1.0' GROUP by User; 

上述查詢將返回不同的數字,但是,我想將計數轉換爲與總記錄數相關的百分比。考慮WHERE子句的記錄總數。在SQL查詢中計算行內百分比

回答

2
SELECT R1.user, COUNT(*)/R2.COUNT_ALL AS Expr1 
    FROM Releases R1, 
     (SELECT COUNT(*) As COUNT_ALL FROM Releases WHERE Release = '1.0') R2 
WHERE R1.Release = '1.0' 
GROUP BY R1.user, R2.COUNT_ALL 
1

這是一個使用一個SELECT另一種方法:

SELECT 
    Tests.User, 
    Count(IIf([Tests].[Release]='1.0', 1, Null))/Count(*) AS Percentage 
FROM 
    Tests 
GROUP BY 
    Tests.User 

與早期建議的方法,這種人會,是好還是壞,返回記錄在測試有沒有記錄用戶在那裏發佈是「1.0」。如果你不想要這些記錄,你可以添加一個HAVING子句來消除它們。

希望這會有所幫助。

-2

像Brian的答案,但在標準SQL而不是MS Access中。 (你也可以使用COUNT代替SUMNULL在那裏我有0。)

SELECT 
    Tests.User, 
    Sum(CASE WHEN Release='1.0' THEN 1 ELSE 0 END)/Count(*) AS Percentage 
FROM 
    Tests 
GROUP BY 
    Tests.User 
+0

它是如何有用的不數據庫引擎中的實際問題的工作答案嗎?包含Access/Jet/ACE解決方案並提供非Access方法是一回事,但我沒有看到這個答案在這裏添加了任何有用的東西 - 它只會混淆人們正在尋找適用於Access/Jet/ACE的解決方案。 – 2011-05-30 22:41:07

+2

已被刪除的答案badmouths訪問涉嫌不支持PARTITION BY,但事實是,Access/Jet/ACE SQL確實有一個可能在這裏工作的Partition()函數(我不確定它是否存在)。絕對值得閱讀它的幫助文件,就像幾年前我第一次遇到它時那樣,我很驚訝它存在。 – 2011-05-30 22:43:36

+0

@ David-W-Fenton:因爲某人有可能在搜索中點擊此頁面,這就是爲什麼,而Access-only解決方案對他們沒有任何好處。 AFAIK,標準的SQL CASE語句也適用於Access,因此更爲可取。 – 2011-05-31 02:48:21