针对多个条件的不同记录的 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 计数的主要内容,如果未能解决你的问题,请参考以下文章
您将如何使用 T-SQL 获得满足条件的顺序/连续记录的最大/最大计数