使用T-SQL(我们在2008年,但如果可以在2012年使用一些新的功能/扩展,请注意)
这完全出于好奇......我最终只是在GROUP BY中使用GROUP BY。但我很想知道是否有办法在单个查询中执行此操作,也许还有一些奇特的shmancy函数或扩展我还没有学到。 ......这是一项挑战,而不是完成工作的需要,因为它已经完成了。
我尝试在这里构建一个示例表,但它太大而无法构建,所以这就是概念。该表有三列,UserID,UserGroupID和Minutes。以一小时为增量,我们记录用户在应用程序中花费的时间。因此,例如,UserID 1在04/28/2014 10:00:00的小时内花费了10分钟,然后在2014年4月28日11:00:00的小时内花费了15分钟......依此类推。 (对于此示例,请忽略每天或每月的任何时间限制等)
我希望每组使用该应用程序至少30分钟的用户数量。这是使用的逻辑:
SELECT UserGroupID, COUNT(*)
FROM (
SELECT UserGroupID, UserID
FROM Example
GROUP BY UserGroupID, UserID
HAVING SUM([Minutes]) >= 30
) AS x
GROUP BY UserGroupID
问题是,这可以在一个查询中完成吗?我不是在寻找效率,我只是好奇。
答案 0 :(得分:0)
我不这么认为,但是负面证明很难证明。
可以简化以下查询(不包含having
子句)。所以:
SELECT UserGroupID, COUNT(*)
FROM (
SELECT UserGroupID, UserID
FROM Example
GROUP BY UserGroupID, UserID
) AS x
GROUP BY UserGroupID;
几乎与:
相同SELECT UserGroupId, COUNT(DISTINCT UserId)
FROM Example
GROUP BY UserGroupId;
(如果UserId
可以是NULL
,则这些不完全相同,但也可以处理这种情况。)
UserGroupId, UserId
汇总才能获得sum()
条件。然后,您只需按UserGroupId
汇总。没有什么可以想到的。