我正在尝试查询 Oracle 中的审核表,以列出文档在给定时间范围内的受欢迎程度(唯一点击数)。
到目前为止我开发的 SQL 是:
select distinct dt.name "Document name", ku.name "User name", count(*) "Number of hits"
from dauditnew da,
kuaf ku,
dtree dt
where ku.id=da.performerid
and (da.auditstr='Fetch')
and dt.dataid = ANY(DOCID1,DOCID2)
and da.dataid = ANY(DOCID1,DOCID2)
and da.auditdate between TO_DATE('01-JAN-12') and TO_DATE('31-OCT-12')
group by dt.name, ku.name
它会输出类似于以下内容的数据:
Document name User name Hit count
document1.pdf rimnet\user1 1
document1.pdf rimnet\user2 1
document1.pdf rimnet\user3 17
document1.pdf rimnet\user4 1
document2.pdf rimnet\user5 1
document1.pdf rimnet\user6 1
document3.pdf rimnet\user7 1
但我真正需要的是它对结果进行分组并对每个唯一用户进行一次计数:
Document name User name Hit count
document1.pdf n/a 5
document2.pdf n/a 1
document3.pdf n/a 1
有人能指出我正确的方向吗?
最佳答案
根据您想要的结果,听起来您只想要用户计数而不是点击次数(否则,聚合 17 个点击 + 1 个点击 + 1 个点击 + 1 个点击是没有意义的+ 1 次命中,最终得到 5 次命中)。如果是这样的话
select dt.name "Document name", count(distinct ku.name) "Distinct users"
from dauditnew da,
kuaf ku,
dtree dt
where ku.id=da.performerid
and (da.auditstr='Fetch')
and dt.dataid = ANY(DOCID1,DOCID2)
and da.dataid = ANY(DOCID1,DOCID2)
and da.auditdate between TO_DATE('01-JAN-12') and TO_DATE('31-OCT-12')
group by dt.name
关于sql - Oracle SQL - 如何对结果进行分组和聚合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13295520/