MySQL - 如何通过投票总数进行加入和订购?

时间:2013-10-17 16:27:09

标签: mysql sql

我有这样的架构(只是试验,所以如果你有改进建议,我很满意):

mysql> describe contest_entries;
+---------------+----------------+------+-----+---------+----------------+
| Field         | Type           | Null | Key | Default | Extra          |
+---------------+----------------+------+-----+---------+----------------+
| entry_id      | int(10)        | NO   | PRI | NULL    | auto_increment |
| member_id     | int(10)        | YES  |     | NULL    |                |
| person_name   | varchar(10000) | NO   |     | NULL    |                |
| date          | date           | NO   |     | NULL    |                |
| platform      | varchar(30)    | YES  |     | NULL    |                |
| business_name | varchar(100)   | YES  |     | NULL    |                |
| url           | varchar(200)   | YES  |     | NULL    |                |
| business_desc | varchar(3000)  | YES  |     | NULL    |                |
| guid          | varchar(50)    | YES  | UNI | NULL    |                |
+---------------+----------------+------+-----+---------+----------------+
9 rows in set (0.00 sec)

mysql> describe contest_votes;
+------------------+---------+------+-----+---------+----------------+
| Field            | Type    | Null | Key | Default | Extra          |
+------------------+---------+------+-----+---------+----------------+
| vote_id          | int(10) | NO   | PRI | NULL    | auto_increment |
| user_id          | int(10) | NO   |     | NULL    |                |
| contest_entry_id | int(10) | NO   | MUL | NULL    |                |
| vote             | int(7)  | NO   |     | NULL    |                |
+------------------+---------+------+-----+---------+----------------+

我正在尝试将数据作为排行榜,以最多的票数排序结果。我该怎么办?我能够做左连接部分,但是查询的总和和排序部分让我感到困惑。

谢谢!

2 个答案:

答案 0 :(得分:1)

select e.entry_id, sum(v.vote) as votes
from contest_entries e
left join contest_votes v on e.entry_id = v.contest_entry_id 
group by e.member_id
order by votes desc

答案 1 :(得分:1)

SELECT entry_id
FROM contest_entries
LEFT OUTER JOIN contest_votes ON entry_id = contest_entry_id
GROUP BY entry_id
ORDER BY SUM(vote) DESC