2012-08-01 55 views
0

下面的查询似乎有一个问题来计算“ratingValue”,因为SUM内有SUM(h.liked)。不能做SUM的SUM吗?

SELECT d.itemID1 as item, 
    sum(d.sum + d.count*SUM(h.liked))/sum(d.count) as ratingValue 
FROM history h, dev d 
WHERE h.userID=:id_user 
    AND d.itemID1<>h.itemID 
    AND d.itemID2=h.itemID 
GROUP BY d.itemID1,h.itemID 

为了更好地理解这是当初和工作查询(从趿拉一种算法):

我刚刚替补的“评级”表“历史”,因为在我的情况r.ratingValue是所有的 “喜欢” 一个用户给出一个ITEMID的(=> r.ratingValue = SELECT SUM(喜欢)从历史中GROUP BY h.itemID)的总和:

SELECT d.itemID1 as item, 
    sum(d.sum + d.count*r.ratingValue)/sum(d.count) as ratingValue 
FROM rating r, dev d 
WHERE r.userID=$userID 
    AND d.itemID1<>r.itemID 
    AND d.itemID2=r.itemID 
GROUP BY d.itemID1 
+1

你得到了什么错误? – 2012-08-01 02:16:38

+0

我有“组功能无效” – Anon 2012-08-01 02:32:00

回答

2

由于错误消息说,你不能接下来的聚合功能。我想你的意思是:

SELECT d.itemID1 as item, 
     sum(d.sum + d.count*h.sumliked)/sum(d.count) as ratingValue 
FROM (select h.userId, h.itemId, sum(h.liked) as sumliked 
     from history h 
     group by h.userId, h.itemId 
    ) h join 
    dev d 
    on h.userID=:id_user AND 
     d.itemID1<>h.itemID AND 
     d.itemID2=h.itemID 
GROUP BY d.itemID1 

也就是说,您需要分别进行聚合,在这种情况下使用子查询。我还修复了查询中的连接语法。

+0

太愉快了,非常感谢。 – Anon 2012-08-01 03:46:14