针对多个条件的不同记录的 SQL 计数

Posted

技术标签:

【中文标题】针对多个条件的不同记录的 SQL 计数【英文标题】:SQL count of distinct records against multiple criteria 【发布时间】:2013-10-21 12:43:45 【问题描述】:

我在 SQL SERVER “用法”中有一个表,它由 4 列组成

userID, appid, licenseid, dateUsed

现在我需要查询该表,以便找出在某个时间范围内有多少用户使用许可下的应用程序。请记住,即使用户 1 在 1 月 1 日和 2 日使用该应用程序,他们也只会在结果中计为 1。即时间范围内的唯一用户。

所以查询

where dateUsed > @from  AND dateUsed < @dateTo

我想要返回的是一个行表

、appid、licenseid

有人知道怎么做吗?我一直在玩 count 作为子查询,然后尝试对结果求和,但还没有成功。

【问题讨论】:

你能把你到目前为止所做的整个查询贴出来吗? 【参考方案1】:

刚刚对此进行了测试并提供了您想要的结果:

SELECT appid, licenseid, COUNT(DISTINCT userID)
FROM usage
WHERE dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid

【讨论】:

【参考方案2】:

这样的事情应该可以工作:

SELECT   appid, licenseid, COUNT(DISTINCT userid) as DistictUsers
FROM     yourTable
WHERE    dateUsed BETWEEN @from AND @dateTo
GROUP BY appid, licenseid

【讨论】:

【参考方案3】:

只需复制、粘贴并运行,看看它是否如您所愿:

SELECT appId, licenseId, COUNT(userId)
FROM usage
WHERE dateUsed > @from AND dateUsed < @dateTo
GROUP BY appId, licenseId

【讨论】:

【参考方案4】:

您尚未在此处发布查询,但是。我建议您使用 PARTITION BY 为每个许可证 ID 生成唯一的行数。您可以为使用每个单独许可证的用户数创建子查询。 SELECT .... FROM 此子查询并使用 HAVING 子句过滤您的首选日期/用户。也许不是最好的解释。 请发布示例查询。

【讨论】:

以上是关于针对多个条件的不同记录的 SQL 计数的主要内容,如果未能解决你的问题,请参考以下文章

SQL 之 ON 和 WHERE执行顺序

SQL 按小时获取不同的客户计数

您将如何使用 T-SQL 获得满足条件的顺序/连续记录的最大/最大计数

SQL查询;如果子记录 = 条件则排除记录

应该针对不同的排序和过滤条件创建哪些MongoDB索引来提高性能?

根据 SQL Server 中的条件计数