0

次のクエリでは、SUM内にSUM(h.liked)があるため、「ratingValue」の計算に問題があるようです。

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 

理解を深めるために、これは(Slop Oneアルゴリズムからの)元の機能するクエリです。

私の場合、r.ratingValueはユーザーがitemIDに与えたすべての「いいね」の合計であるため、「rating」テーブルを「history」に置き換えます(=> r.ratingValue = SELECT SUM(liked)FROM history 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
4

1 に答える 1

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

つまり、この場合はサブクエリを使用して、集計を個別に行う必要があります。クエリの結合構文も修正しました。

于 2012-08-01T03:07:43.593 に答える