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