我正在努力处理查询的WHERE部分。查询本身包含一个基于两个表中都存在的ID的左连接。但是,我要求where语句只返回其中一列中存在的最大单个结果。目前,我返回连接中的所有值,包括我不想要的值。
我当前的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
发布于 2016-07-21 00:47:58
我还是不太确定我是否正确理解了你的表格。似乎一个用户有一个或多个团队,每个团队都有一个或多个游戏,每个游戏都有一个或多个结果。您希望为每个用户和每个团队显示连接在一列中的游戏,以及连接在第二列中的每个游戏的最高分。
如果我的假设是正确的,下面的查询应该可以做到这一点。基本上,您首先按用户/团队/游戏对数据进行分组,并选择每场比赛的最大点数,然后按用户/团队对结果进行分组,并将游戏和点数连接起来。
如果我误解了你的任何要求,请告诉我。
SQL Fiddle中的示例
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
https://stackoverflow.com/questions/38482510
复制相似问题