首页 > 解决方案 > 嵌套分组查询的正确语法是什么?

问题描述

我有一个简单的表格,其中包含:

OnDate
SystemUserId
ObjectId
EntityId

我正在尝试获取一个结果集以显示每个 systemuserId 和 entityId 访问了多少个唯一 objectId

如果我像这样执行单个系统用户和实体,它会显示 83 个结果

SELECT DISTINCT objectid 
FROM public.auditlog
WHERE ondate >= current_date
AND ondate < current_date + 1
AND systemuserid = '97de2a93-737c-e311-8437-12d0d8a96a66'
AND entityid = '70816501-edb9-4740-a16c-6a5efbc05d84'

当我尝试分组时,虽然我得到 189,但肯定有重复。

谢谢

SELECT A.entityid, A.systemuserid, SUM(A.c)
FROM
(SELECT entityid,systemuserid,objectid, count(*) as c
FROM public.auditlog
WHERE ondate >= current_date
AND ondate < current_date + 1
AND systemuserid = '97de2a93-737c-e311-8437-12d0d8a96a66'
AND entityid = '70816501-edb9-4740-a16c-6a5efbc05d84'
GROUP BY entityid, systemuserid,objectid) A
GROUP BY a.entityid, a.systemuserid

标签: sqlpostgresql

解决方案


为什么不直接使用count(distinct)

SELECT entityid, systemuserid, count(distinct objectid) as c
FROM public.auditlog
WHERE ondate >= current_date AND
      ondate < current_date + 1 AND
      systemuserid = '97de2a93-737c-e311-8437-12d0d8a96a66' AND
      entityid = '70816501-edb9-4740-a16c-6a5efbc05d84'
GROUP BY entityid, systemuserid

推荐阅读