作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在努力处理查询的 WHERE 部分。查询本身包含一个基于两个表中都存在的 ID 的 LEFT JOIN。但是,我要求 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
最佳答案
仍然不太确定我是否正确理解了你的表格。似乎一个用户有一个或多个球队,每个球队有一场或多场比赛,每场比赛有一个或多个结果。您希望为每个用户和每个团队显示一列中串联的比赛,以及第二列中串联的每场比赛的最高分。
如果我的假设是正确的,下面的查询应该可以解决问题。基本上,您首先按用户/团队/游戏对数据进行分组,并选择每场比赛的最高得分,然后按用户/团队对结果进行分组,并将游戏和得分连接起来。
如果我误解了您的任何要求,请告诉我。
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
关于mySQL IF 条件 THEN 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38482510/
我是一名优秀的程序员,十分优秀!