所以在像这样的简单表格中,如何选择具有最高价值的标题?
|_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
如果有人可以帮我解决这个问题,我真的很感激
如果要允许多个标题共享相同的最大值,请使用子查询:
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_VALUE上title,这是不是你想要的.你想要一个特定的.
你的查询还有另一个缺陷:HAVING MAX(value)你没有比较(HAVING MAX(value) > 1000例如).但是DBMS期望一个带有布尔结果的表达式(true或false或null).您的表达式理想情况下应该引发错误,但MySQL只是将值转换为boolean,false = 0,true <> 0. 68565不为零,因此条件为true.
因此,您最终得到一行持有任意选择的标题.
limit通过使用降序值来使用和排序
select * from table
order by value desc
limit 1
Run Code Online (Sandbox Code Playgroud)
你需要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)