SELECT User, COUNT(*) as count FROM Tests WHERE Release = '1.0' GROUP by User;
上述查詢將返回不同的數字,但是,我想將計數轉換爲與總記錄數相關的百分比。考慮WHERE子句的記錄總數。在SQL查詢中計算行內百分比
SELECT User, COUNT(*) as count FROM Tests WHERE Release = '1.0' GROUP by User;
上述查詢將返回不同的數字,但是,我想將計數轉換爲與總記錄數相關的百分比。考慮WHERE子句的記錄總數。在SQL查詢中計算行內百分比
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
這是一個使用一個SELECT另一種方法:
SELECT
Tests.User,
Count(IIf([Tests].[Release]='1.0', 1, Null))/Count(*) AS Percentage
FROM
Tests
GROUP BY
Tests.User
與早期建議的方法,這種人會,是好還是壞,返回記錄在測試有沒有記錄用戶在那裏發佈是「1.0」。如果你不想要這些記錄,你可以添加一個HAVING子句來消除它們。
希望這會有所幫助。
像Brian的答案,但在標準SQL而不是MS Access中。 (你也可以使用COUNT
代替SUM
與NULL
在那裏我有0
。)
SELECT
Tests.User,
Sum(CASE WHEN Release='1.0' THEN 1 ELSE 0 END)/Count(*) AS Percentage
FROM
Tests
GROUP BY
Tests.User
它是如何有用的不數據庫引擎中的實際問題的工作答案嗎?包含Access/Jet/ACE解決方案並提供非Access方法是一回事,但我沒有看到這個答案在這裏添加了任何有用的東西 - 它只會混淆人們正在尋找適用於Access/Jet/ACE的解決方案。 – 2011-05-30 22:41:07
已被刪除的答案badmouths訪問涉嫌不支持PARTITION BY,但事實是,Access/Jet/ACE SQL確實有一個可能在這裏工作的Partition()函數(我不確定它是否存在)。絕對值得閱讀它的幫助文件,就像幾年前我第一次遇到它時那樣,我很驚訝它存在。 – 2011-05-30 22:43:36
@ David-W-Fenton:因爲某人有可能在搜索中點擊此頁面,這就是爲什麼,而Access-only解決方案對他們沒有任何好處。 AFAIK,標準的SQL CASE語句也適用於Access,因此更爲可取。 – 2011-05-31 02:48:21