आप जो करने की कोशिश कर रहे हैं वह प्रति समूह कई रिकॉर्ड का चयन करना है। यह आपकी क्वेरी में इसी तरह के वेरिएबल का उपयोग करके किया जा सकता है:
select *
from
(
SELECT sid,
state,
votes,
@prev := @curr,
@curr := state,
@rank := IF(@prev = @curr, @rank+1, 1) AS rank
FROM
(
select t1.sid, state, votes
FROM table1 t1
INNER JOIN table2 t2
ON t1.sid=t2.sid
) src, (SELECT @curr := null, @prev := null, @rank := 1) r
ORDER BY state, votes desc
) src
where rank <= 2
order by state, votes;
देखें SQL Fiddle with Demo
ऐसा करने के और भी तरीके हैं जो यहां बताए गए हैं:
उपयोग करना प्रति समूह N परिणाम प्राप्त करने के लिए GROUP BY के भीतर LIMIT करें?