如何选择具有最高价值的标题?

K. *_* P. 0 mysql sql

所以在像这样的简单表格中,如何选择具有最高价值的标题?

|_title_||_value_|
|_title1_||_50652_|
|_title2_||_57465_|
|_title3_||_68565_|
|_title4_||_14645_|
Run Code Online (Sandbox Code Playgroud)

就像在这种情况下title3具有最高值,所以我想用SQL代码选择title3,但我不知道如何

我尝试过的:

SELECT title FROM table HAVING MAX(value);
Run Code Online (Sandbox Code Playgroud)

我认为这是我能做到的,但它不起作用

这可能不是那么难,但我完全不熟悉SQL

如果有人可以帮我解决这个问题,我真的很感激

Tho*_*ner 6

如果要允许多个标题共享相同的最大值,请使用子查询:

select title from table where value = (select max(value) from table);
Run Code Online (Sandbox Code Playgroud)

编辑:至于你自己的查询:

通过请求MAX(value)without GROUP BY子句将所有行聚合为单个行.但是你选择了title.哪一个?您没有告诉DBMS,因此查询实际上是无效的SQL.MySQL的,然而,让这个滑,默默地适用ANY_VALUEtitle,这是不是你想要的.你想要一个特定的.

你的查询还有另一个缺陷:HAVING MAX(value)你没有比较(HAVING MAX(value) > 1000例如).但是DBMS期望一个带有布尔结果的表达式(true或false或null).您的表达式理想情况下应该引发错误,但MySQL只是将值转换为boolean,false = 0,true <> 0. 68565不为零,因此条件为true.

因此,您最终得到一行持有任意选择的标题.


Zay*_*hin 5

limit通过使用降序值来使用和排序

select * from table
order by value desc
limit 1
Run Code Online (Sandbox Code Playgroud)


Yog*_*rma 5

你需要order by条款与limit条款:

SELECT title
FROM table
ORDER BY val DESC
LIMIT 1;
Run Code Online (Sandbox Code Playgroud)

这将只返回1行,如果你有相同的更高值,那么你将需要使用subquery:

select t.*
from table t
where t.val = (select max(t1.val) from table t1)
Run Code Online (Sandbox Code Playgroud)