कृपया इस क्वेरी के नीचे प्रयास करें। ROW_NUMBER() OVER(PARTITION BY ..)
. का उपयोग करना प्रत्येक 'which'
. के लिए एक रैंक/रिकॉर्ड संख्या उत्पन्न करें इसके आधार पर आइटम और सॉर्ट करें। (उम्मीद है कि यह आपके लिए काम करेगा, मेरे पास खुद को आजमाने के लिए टेबल स्कीमा या नमूना डेटा स्क्रिप्ट नहीं है)
SELECT
pr1.id AS user_id,
pr1.title AS user_name,
pr2.id AS liker_id,
pr2.title AS liker_name,
x.which AS which_table,
x.cnt AS total
FROM
(
SELECT rid, rootid, which, COUNT(*) AS cnt
,ROW_NUMBER() OVER(PARTITION BY which ORDER BY rid) AS new_order
FROM
(
SELECT rid, rootid, 'vote' which FROM p_likes
UNION ALL
SELECT rid, rootid, 'comment' which FROM p_comments
UNION ALL
SELECT rid, rootid, 'friend' which FROM relations
) y
WHERE y.rootid = 1246 AND y.rootid <> y.rid
GROUP BY y.rid, y.rootid, y.which
) x
INNER JOIN pagesroot pr1 on x.rootid = pr1.id
INNER JOIN pagesroot pr2 on x.rid = pr2.id
ORDER BY new_order,x.cnt desc;