我有一个看起来像
的数据库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
我正在尝试返回玩家姓名和MAX TR的金额。所以在这种情况下,玩家3将是93 TR。
我在SQLITE中使用此SQL查询
SELECT MAX(TR), name
FROM database
WHERE TR != "-"
它返回正确的MAX(TR),但是它给出了错误的玩家名称。
93 Player 1
我已经运行了其他查询,例如MAX(AST),但它也提供了错误的玩家名称。无论我使用哪个MAX查询,问题都会返回相同的玩家名称。
我还试过这个尝试从这里按照SQL执行的顺序http://www.bennadel.com/blog/70-sql-query-order-of-operations.htm
FROM database
WHERE TR != "-"
SELECT MAX(TR), name
以及
SELECT name, MAX(TR)
FROM database
GROUP BY name
LIMIT 1
它返回错误的TR但是具有该TR的正确对应名称。
如果是我必须使用的问题
WHERE TR != "_"
否则它将返回一个玩家名称和TR" - "。我不确定为什么会这样。
查询语句的顺序是否有任何问题?
答案 0 :(得分:1)
获得所需内容的最简单方法是使用order by
和limit
:
SELECT name, TR
FROM database
WHERE TR <> '-'
ORDER BY TR DESC
LIMIT 1;
您甚至不需要max()
。
答案 1 :(得分:0)
我会使用子查询,可能是这样的:
SELECT
name,
TR
FROM
database
WHERE
TR IN (
SELECT
MAX(TR)
FROM
database
WHERE
TR != "-"
)
请注意,当多个玩家拥有相同的TR时,这可以为您提供多个结果,这也是最大TR。
答案 2 :(得分:0)
MAX是SQL中的聚合函数。您不能在SELECT语句中使用聚合函数和非聚合元素,例如您的情况下的列。
而不是这样做尝试这个解决方案:
SELECT name, TR
FROM database
WHERE TR = (
SELECT MAX(TR)
FROM database
WHERE TR != "-"
)