RETURN QUERY
複数のステートメントを持つ関数があります。N
最後に、ランダムなレコードのみを取得したいと考えています。LIMIT max_size
最後に各RETURN QUERY
ステートメントを設定すると、 max_size
* 回のカウントが得られますRETURN QUERY
。
私の機能の短いバージョン:
CREATE OR REPLACE FUNCTION android_getproposedsongs_test(
IN puserid character varying, max_size int)
RETURNS TABLE(sid uuid, method text) AS
$BODY$
DECLARE
songCount int;
BEGIN
RETURN QUERY
SELECT trackid as sid, lower('popular') as method
FROM ratingrecord
WHERE trackid NOT IN (
SELECT trackid FROM ratingrecord WHERE userid = puserid)
AND ratingrecord.rating > 0
GROUP BY trackid
HAVING SUM(rating) > 0
ORDER BY SUM(rating) DESC
LIMIT max_size;
CREATE TEMP TABLE recommended ON COMMIT DROP
AS
SELECT trackid, lower('recommended')
FROM ratingrecord finalRate
INNER JOIN
(
SELECT otherRate.userid AS otherUserId
, SUM(myRate.rating * otherRate.rating) as SumRating
FROM ratingrecord AS myRate
INNER JOIN ratingrecord AS otherRate
ON myRate.trackid = otherRate.trackid
WHERE myRate.userid = puserid AND myRate.userid != otherRate.userid
GROUP BY otherRate.userid
HAVING SUM(myRate.rating * otherRate.rating) > 0
) AS userRelations
ON finalRate.userid = userRelations.otherUserId
WHERE finalRate.trackid NOT IN (SELECT trackid FROM ratingrecord WHERE userid = puserid)
GROUP BY finalRate.trackid
HAVING SUM(finalRate.rating * userRelations.SumRating) > 0
ORDER BY SUM(finalRate.rating * userRelations.SumRating) DESC
LIMIT max_size;
RETURN QUERY SELECT * FROM recommended;
-- another RETURN QUERY statements
END;
$BODY$
LANGUAGE plpgsql VOLATILE;
結果セットのようなものが欲しいのですORDER BY random() LIMIT max_size
が、どこに配置すればよいかわかりません。