按查询获取组的总数

时间:2011-11-08 21:14:18

标签: sql ms-access

我正在尝试将总计数作为一个列包含在查询中:

SELECT un.user, un.role
FROM [Unique] un group by user, role;

在此查询中,我有2列,但我想添加第三列作为上述查询中计算的总行数。

3 个答案:

答案 0 :(得分:1)

SELECT un.user, un.role, 
   (select count(*) from 
      (Select user, role from [unique] group by user, role)) as CNT
FROM [Unique] un 
group by user, role;

虽然这将需要重新计算每个行的时间......但可能有更好的方法。

我支持上面的评论,你可以通过大多数开发语言从记录集中获取。所以让它在查询结果中返回而不是查看元数据是奇怪的,至少可以说。

Select un.user, un.role
From [unique] un
group by grouping sets ((user, role), ())

答案 1 :(得分:1)

这适用于MS Access (与Oracle和其他数据库下的工作非常类似)

SELECT
    un.user,
    un.role,
    (
        SELECT COUNT(*)
        FROM (
            SELECT un1.user, un1.role
            FROM [Unique] un1 group by user, role
        )
    )
FROM [Unique] un group by user, role;

以下是实际的Oracle语法:

SELECT
    un."user",
    un.role,
    (
        SELECT COUNT(*)
        FROM (
            SELECT un1."user", un1.role
            FROM "Unique" un1 group by "user", role
        )
    )
FROM "Unique" un group by "user", role;

作为参考,这里是SQL Server特定的解决方案,使用CTE

WITH Q([user], role) AS (
    SELECT un.[user], un.role
    FROM [Unique] un group by [user], role
)
SELECT *, (SELECT COUNT(*) FROM Q)
FROM Q

答案 2 :(得分:0)

如果COUNT(*)不起作用(并且它不适用于每个数据库),则可以尝试COUNT(0)。它比计算主键更快。您可能希望COUNT(0)为1,但实际上它总是返回行数。至少它在我曾经使用的每个数据库上都有。当然,你可以使用任何其他常量而不是0 - 除了null。