
这是我的数据库。每一张照片都有一些要点,是由特定的用户拍摄的。每一张照片也被分配到活动中。我想找一张每场比赛得分最高的照片。我也想数一数你赢了多少项。对于id = 10的用户。你能帮帮我吗?我不知道如何解决这个问题。
发布于 2016-04-11 08:37:22
以下是实现您所需的两个查询:
每个事件的最高点数的图片。
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见SQL小提琴。
数一数你赢了多少项
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请参阅SQL小提琴
https://stackoverflow.com/questions/36535639
复制相似问题