2016-01-27 90 views
0

我的模型的總和如下:查詢的值在許多一對多的關係

table video: 
int id (PK) 
int views 

table tag: 
int id (PK) 

table video_tag: 
int id (PK) 
int video_id (FK to video.id) 
int tag_id (FK to tag.id) 

該模型描述了標記和視頻之間的許多一對多關係。視頻可以有多個標籤來描述其內容。它也有一個視圖數量的字段。同一個標籤也可以指多個視頻。

我想建立一個查詢(最好是在JPA/JPQL/HQL,但SQL也將這樣做),它返回的影片時,他們指有意見的總和下令所有標籤。

例如:兩個視頻videoA和videoB都有標籤Foo。 VideoA有2個視圖,videoB有3個視圖。排序上標記符的數量爲5

這裏使用兩個嘗試JPA:

@Query("SELECT t FROM Tag t, SUM(v.views) as viewCount FROM Video v WHERE t MEMBER OF v.tags ORDER BY viewCount DESC") 
@Query("SELECT t FROM (SELECT t, SUM(v.views) as viewCount FROM Tag t, Video v WHERE t MEMBER OF v.tags) ORDER BY viewCount DESC") 

嘗試使用SQL:

select t.id, sum(v.views) from tag t, video v where t.id in (select vt.tag_id from video_tag vt where vt.tag_id=t.id and vt.video_id=v.id) 
+0

Down投票,因爲它沒有顯示任何努力。只是要求。 – Shaharyar

+0

我增加了兩次嘗試,我限制查詢JPA – Vjeetje

回答

0

三個表和group by之間的簡單join應該工作:

select t.id, t.label, sum(views) 
from video_tag as vt 
inner join video as v on v.id = vt.video_id 
inner join tag as t on t.id = vt.tag_id 
group by t.id, t.label 
; 

看到它在這裏運行:http://sqlfiddle.com/#!9/e366a0/1

+0

我還發現做同樣的事情的JPA查詢(甚至更短:)) SELECT t FROM Tag t JOIN FETCH t.videos v GROUP BY t ORDER BY SUM v.views)DESC – Vjeetje