2014-01-18 45 views
0

我想找到特定州的頂級貢獻者: 下面的候選人爲該州收集了特定的選票。 找到該州的最佳候選人。特定類別的頂級推薦用戶

create table uservotes(id int, name varchar(50), vote int,state int); 

INSERT INTO uservotes VALUES 
(1, 'A', 34,1), 
(2, 'B', 80,1), 
(3, 'bA', 30,1), 
(4, 'C', 8,1), 
(5, 'D', 4,1), 
(6, 'E', 14,2), 
(7, 'F', 304,2), 
(8, 'AA', 42,3), 
(9, 'Ab', 6,3), 
(10, 'Aa', 10,3); 

美國

create table states(state_id int, name_state varchar(50)); 

INSERT INTO states VALUES 
(1, 'CA'), 
(2, 'AL'), 
(3, 'AZ'), 

我要找:根據貢獻的行列

CAL 
2 
1 
3 
4 
5 

。 我如何得到這個。

我真的很感激任何幫助。

在此先感謝。

代碼嘗試:

select uv.*, (@rank := @rank + 1) as rank 
from uservotes uv,states s cross join 
    (select @rank := 0) const on uv.statesid = s.state_id 
where name_state = 'CAL' 
order by vote desc; 
+1

的[獲得MySQL的特定用戶的等級(可能重複http://stackoverflow.com/questions/21210623/get-rank-of-specific- users-in-mysql) –

+0

它不一樣,它是特定類別的頂級用戶,而不是所有具有特定子集的用戶。 – jason

回答

1

這很容易。您可以使用joingroup_concat()

select name_state, substring_index(group_concat(id order by votes desc), ',', 5) 
from uservotes uv join 
    states s 
    on uv.state = s.state 
group by name_state; 

group_concat()會把所有的ID,以便以最高得票第一。 substring_index()會提取前五個。

編輯:

讓高層排在一排的用戶,只需添加一個where name_state = 'CA'上述查詢。

爲了讓他們在不同的行:

select uv.* 
from uservotes uv join 
    states s 
    on uv.state = s.state 
where state = 'CA' 
order by votes desc 
limit 5; 
+0

獲得一個特定州的頂級用戶.ie:在這種情況下,「CAL」 – jason

+0

@jason。 。 。我不知道這個評論意味着什麼。用樣本數據和期望的結果編輯您的問題。 –

+0

我改變了上面的評論。它可以嗎? – jason