Mysql查询问题
我的mysql数据库中有3个表需要查询Mysql查询问题,mysql,sum,Mysql,Sum,我的mysql数据库中有3个表需要查询 Users\u rates(字段:id、userid、raterid、rate、eventid)包含其他用户(raterid)分配给参与特定事件(eventid)的用户(userid)的所有速率(rate) 事件\u参与者(字段:id、userid、eventid),包含参与每个事件(eventid)的所有用户(userid) 用户(字段:id、name、lastname)包含所有用户相关数据 我需要查询这三个表,以检索特定于事件的用户费率排名 例如
- Users\u rates(字段:id、userid、raterid、rate、eventid)包含其他用户(raterid)分配给参与特定事件(eventid)的用户(userid)的所有速率(rate)
- 事件\u参与者(字段:id、userid、eventid),包含参与每个事件(eventid)的所有用户(userid)
- 用户(字段:id、name、lastname)包含所有用户相关数据
SELECT events_participants.userid,users.name,users.lastname,
(SELECT SUM(rate)FROM users_rates WHERE users_rates.eventid=31 AND users_rates.userid=events_participants.userid)AS rate
FROM(( events_participants INNER JOIN users ON events_participants.userid=users.id)
LEFT OUTER JOIN users_rates ON events_participants.userid=users_rates.userid )
WHERE events_participants.eventid=31
但我收到:
userid | name | lastname | rate
1 | luca | silvestro | 1
3 | claudio | buricchi | 6
3 | claudio | buricchi | 6
什么是正确的查询
谢谢
卢卡试试这个:
SELECT users.userid, users.name, users.lastname, temp.sum as rate
FROM users LEFT JOIN (
SELECT userid, SUM(rate) as sum FROM users_rates WHERE eventid = 31 GROUP BY userid
) as temp USING (userid)
它可能会出现错误,这可能会起作用:
SELECT users.userid, users.name, users.lastname, temp.sum as rate
FROM users, (
SELECT userid, SUM(rate) as sum FROM users_rates WHERE eventid = 31 GROUP BY userid
) as temp WHERE users.userid = temp.userid
我不知道我的问题是否正确,但可能是这样的:
SELECT u.id, u.name, u.lastname, SUM(ur.rate) AS rate
FROM users AS u
INNER JOIN users_rates AS ur ON ur.userid = u.id
WHERE ur.eventid = 31
GROUP BY u.id
编辑:如果您希望接收所有用户的列表,而不管他们是否有任何费率,您也可以加入users\u参与者
表,并将users\u rates
的内部联接
替换为左联接
。WHERE
子句必须引用事件参与者
(不再是用户
,因为它可能是NULL
):
如果我需要检索参与活动的所有用户的列表,即使他们还没有收到费率(因此他们不在users\u rates表中),该怎么办?然后您还必须加入
events\u参与者
表,并用LEFT join
替换内部联接
。我将按此方向编辑我的帖子。
SELECT u.id, u.name, u.lastname, SUM(ur.rate) AS rate
FROM users AS u
INNER JOIN events_participants AS ep ON ep.userid = u.id
LEFT JOIN users_rates AS ur ON ur.userid = u.id AND ur.eventid = ep.eventid
WHERE ep.eventid = 31
GROUP BY u.id