SQL MAX语句返回错误的列

时间:2014-05-24 22:40:45

标签: sql sqlite

我有一个看起来像

的数据库
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" - "。我不确定为什么会这样。

查询语句的顺序是否有任何问题?

3 个答案:

答案 0 :(得分:1)

获得所需内容的最简单方法是使用order bylimit

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 != "-"
)