gpt4 book ai didi

mySQL IF 条件 THEN 条件

转载 作者:行者123 更新时间:2023-11-29 11:24:21 30 4
gpt4 key购买 nike

我正在努力处理查询的 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com