SQL MAX语句返回错误的列
我有一个DB看起来像SQL MAX语句返回错误的列,sql,sqlite,Sql,Sqlite,我有一个DB看起来像 Year Name TR AST 1 Player 1 10 3 2 Player 1 23 "-" 3 Player 1 35 5 1 Player 2 32 1 2 Player 2 29 "-" 3 Player 2 50 2 1 Player 3 74 3 2
Year Name TR AST
1 Player 1 10 3
2 Player 1 23 "-"
3 Player 1 35 5
1 Player 2 32 1
2 Player 2 29 "-"
3 Player 2 50 2
1 Player 3 74 3
2 Player 3 23 1
3 Player 3 93 9
我试图返回球员姓名和最大TR的金额。因此,在这种情况下,它将是球员3和93 TR
我在SQLITE中使用这个SQL查询
SELECT MAX(TR), name
FROM database
WHERE TR != "-"
它返回正确的最大值(TR),但给出了错误的玩家名称
93 Player 1
我运行过其他查询,比如MAX(AST),它也给出了错误的玩家名称。无论我使用哪个MAX查询(问题所在),都会返回相同的玩家名称
我也尝试过从这里开始遵循SQL执行的顺序
以及
SELECT name, MAX(TR)
FROM database
GROUP BY name
LIMIT 1
它返回了错误的TR,但是该TR的对应名称正确
万一这是我不得不使用的问题
WHERE TR != "_"
否则它将返回一个玩家名和TR“-”。我也不太清楚为什么会这样
我的查询语句的顺序有问题吗?我会使用子查询,可能是这样的:
SELECT
name,
TR
FROM
database
WHERE
TR IN (
SELECT
MAX(TR)
FROM
database
WHERE
TR != "-"
)
请注意,当有多个玩家使用相同的TR时,这会给您多个结果,这也是最大TR。最大值是SQL中的聚合函数。不能在SELECT语句中使用聚合函数和非聚合元素,例如在本例中使用的列 与其这样做,不如尝试以下解决方案:
SELECT name, TR
FROM database
WHERE TR = (
SELECT MAX(TR)
FROM database
WHERE TR != "-"
)
获取所需内容的最简单方法是使用
order by
和limit
:
SELECT name, TR
FROM database
WHERE TR <> '-'
ORDER BY TR DESC
LIMIT 1;
选择名称,TR
从数据库
其中TR'-'
按TR DESC订购
限值1;
你甚至不需要
max()
我真的很惊讶这个查询居然能工作。通常,如果同时使用列和聚合函数,则需要一个group by。谢谢。我删除了前面的评论,因为我明白了为什么Max()在这里不起作用。
SELECT name, TR
FROM database
WHERE TR <> '-'
ORDER BY TR DESC
LIMIT 1;