我正在努力查询的WHERE部分。查询本身包含基于两个表中存在的ID的LEFT JOIN。但是我要求where语句只返回其中一列中出现的最大单个结果。目前,我将返回连接中的所有值,包括我不想要的值。
My Current SQL
SELECT u.uid, t.id
GROUP_CONCAT(u.forename, ' ', u.surname) AS name,
GROUP CONCAT(DISTINCT scores.points) AS point
FROM users AS U
JOIN teamname AS t
LEFT JOIN (
SELECT team_id, id
FROM games AS g
LEFT JOIN (
SELECT points, team_id
FROM scores as s
) AS S ON t.id = S.team_id
WHERE IF (S.points > 3, S.points > 2, S.point =1)
) AS G ON t.id = G.team_id
ORDER BY surname ASC;
这样的结果可能是
的结果NAME | TEAM | GAMES | POINTS
Joe | 1 | 1,2,3,4 | 1,3,3,2,3
在这种情况下,第一场比赛是平局并得到回复,得分更高,我只想得到基于该比赛的更高分数。
任何帮助都将不胜感激。
更新了表格
users
uid
forename
surname
Team
id
teamname
uid
games
id
team_id
points
答案 0 :(得分:1)
仍然不太确定我是否正确理解了你的牌桌。用户似乎有一个或多个团队,每个团队有一个或多个游戏,每个游戏有一个或多个结果。您希望为每个用户和每个团队显示在一列中连接的游戏以及在第二列中连接的每个游戏的最高点。
如果我的假设是正确的,则以下查询应该可以解决问题。基本上,您首先按用户/团队/游戏对数据进行分组,然后选择每个游戏的最大分数,然后按用户/团队对结果进行分组,并连接游戏和分数。
如果我误解了你的任何要求,请告诉我。
中的示例SELECT
t.uid,
t.forename,
t.team_id,
GROUP_CONCAT(t.game_id) as games,
GROUP_CONCAT(t.max_points) as max_points
FROM (
SELECT
users.uid,
users.forename,
teams.id AS team_id,
games.id AS game_id,
max(games.points) as max_points
FROM
users
LEFT JOIN teams ON users.uid = teams.uid
LEFT JOIN games ON teams.id = games.team_id
GROUP BY
users.uid,
users.forename,
teams.id,
games.id
) t
GROUP BY
t.uid,
t.forename,
t.team_id