Mysql 获得最高分数和获胜次数
Mysql 获得最高分数和获胜次数,mysql,select,join,Mysql,Select,Join,这是我的数据库。每一张照片都有一些要点,是由特定的用户拍摄的。每张照片也会分配给活动。我想找一张每场比赛得分最高的照片。我还想计算您赢得了多少比赛(例如,对于id=10的用户)。你能帮帮我吗?我不知道如何解决这个问题。这里有两个查询可以满足您的需要: 为每个事件提供最高点数的图片 看 数一数你赢了多少个项目 请看我认为您不需要所有显示的表格。看起来“点”和“照片”都是“事件”和“用户”之间的关系。“照片”和“点”之间似乎没有直接关系。图片不对。打扰一下更正。对不起,但是,表格“points”的哪
这是我的数据库。每一张照片都有一些要点,是由特定的用户拍摄的。每张照片也会分配给活动。我想找一张每场比赛得分最高的照片。我还想计算您赢得了多少比赛(例如,对于id=10的用户)。你能帮帮我吗?我不知道如何解决这个问题。这里有两个查询可以满足您的需要: 为每个事件提供最高点数的图片 看 数一数你赢了多少个项目
请看我认为您不需要所有显示的表格。看起来“点”和“照片”都是“事件”和“用户”之间的关系。“照片”和“点”之间似乎没有直接关系。图片不对。打扰一下更正。对不起,但是,表格“points”的哪个字段有点数(或者该信息保存在哪个表格中)?您询问的是两个不同的问题:一个是该事件得分最高的事件列表(但是如果出现平局怎么办?);另一个用于用户,该用户赢得的事件数为。
SELECT e.id event_id,
e.name event_name,
ph.id photo_id,
ph.title photo_title,
u.id user_id,
u.login user_login,
COUNT(*) points
FROM events e
INNER JOIN photos ph
ON ph.event_id = e.id
AND ph.id = (
SELECT ph.id
FROM photos ph
INNER JOIN points p
ON p.photo_id = ph.id
WHERE ph.event_id = e.id
GROUP BY ph.id
ORDER BY COUNT(*) DESC
LIMIT 1
)
-- optional if you need to know the points
INNER JOIN points p
ON p.photo_id = ph.id
-- optional if you need to know the owner of the photo
INNER JOIN users u
ON u.id = ph.user_id
GROUP BY e.id,
e.name,
ph.id,
ph.title
SELECT u.id user_id,
u.login user_login,
COUNT(distinct e.id) events_won
FROM events e
INNER JOIN photos ph
ON ph.event_id = e.id
AND ph.id = (
SELECT ph.id
FROM photos ph
INNER JOIN points p
ON p.photo_id = ph.id
WHERE ph.event_id = e.id
GROUP BY ph.id
ORDER BY COUNT(*) DESC
LIMIT 1
)
INNER JOIN users u
ON u.id = ph.user_id
GROUP BY u.id,
u.login