Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/60.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql查询问题_Mysql_Sum - Fatal编程技术网

Mysql查询问题

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)包含所有用户相关数据 我需要查询这三个表,以检索特定于事件的用户费率排名 例如

我的mysql数据库中有3个表需要查询

  • Users\u rates(字段:id、userid、raterid、rate、eventid)包含其他用户(raterid)分配给参与特定事件(eventid)的用户(userid)的所有速率(rate)

  • 事件\u参与者(字段:id、userid、eventid),包含参与每个事件(eventid)的所有用户(userid)

  • 用户(字段:id、name、lastname)包含所有用户相关数据

我需要查询这三个表,以检索特定于事件的用户费率排名

例如,约翰、埃里克和马克参加了“eventid=31”。 约翰从马克那里得到1分,从埃里克那里得到2分。 马克从埃里克那里得到1分。 但是没有人给埃里克打分

我需要检索每个用户名、lastname和eventid=31的接收速率之和

我试过这个:

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