我正在尝试获取组中目录中包含的文件大小的总和。 但是,由于从连接返回的行数,大小会成倍增加。我的查询中还包含其他表来获取历史信息。我有一个PostgreSQL数据库,我在我的存储库界面中使用了一个hibernate查询。
在线,它说我需要子查询我的聚合。但是,我需要连接所有这些表以获取与该目录相关的文件,该文件与该组相关的用户有关。我怎么能做一个明确的总和?
@Query(value = "select a.username as name, sum(d.filesize) as size"
+ "from usergroup a "
+ "join a.nuser b "
+ "join b.directory c "
+ "join c.files d "
+ "join b.nuserhistory e"
+ "group by a.name"
+ "having count(e) > b.maxCount")
表之间的关系:
答案 0 :(得分:0)
您的基本问题似乎是nuserhistory
的加入(每1位用户n行)与行相乘,导致count()
和sum()
的值不正确。
在加入子查询之前,每个用户的聚合(计数)行。相应地将HAVING
条件转换为WHERE
条件。 SQL看起来像这样:
SELECT a.username AS name -- "username" comes from table "usergroup"??
, sum(c.filesize) AS size
FROM usergroup g
JOIN a.nuser a ON ??? -- join conditions unknown
JOIN b.directory b ON ???
JOIN c.files c ON ???
JOIN (
SELECT user_id, count(*) AS ct
FROM b.nuserhistory
GROUP BY user_id -- assuming user_id as foreign key column
) d ON d.user_id = a.id
WHERE d.ct > a.maxCount -- mixed case name without double quotes?
GROUP BY a.username; -- cannot be "a.name"
这主要是猜测,因为你没有透露你的关系模型,你提出的查询仍然没有加起来。