我正在尝试将总计数作为一个列包含在查询中:
SELECT un.user, un.role
FROM [Unique] un group by user, role;
在此查询中,我有2列,但我想添加第三列作为上述查询中计算的总行数。
答案 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。