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

时间:2019-01-25 11:20:46

标签: mysql sql

那么在这样一个简单的表中,如何选择具有最高价值的标题?

|_title_||_value_|
|_title1_||_50652_|
|_title2_||_57465_|
|_title3_||_68565_|
|_title4_||_14645_|

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

我尝试过的事情:

SELECT title FROM table HAVING MAX(value);

我以为这是我可以做到的方式,但这是行不通的

这可能并不难,但是我对SQL完全陌生

如果有人可以帮助我,我将非常感谢

6 个答案:

答案 0 :(得分:6)

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

select title from table where value = (select max(value) from table);

编辑:关于您自己的查询:

通过不带MAX(value)子句的GROUP BY来将所有行汇总为一个行。但是然后您选择title。哪一个?您没有告诉DBMS,因此查询实际上是无效的SQL。但是,MySQL允许您这样做,并在ANY_VALUE上静默应用title,这不是您想要的。您想要一个特定的。

查询中还有另一个缺陷:在HAVING MAX(value)中,您无法进行比较(例如,在HAVING MAX(value) > 1000中)。但是DBMS期望一个带有布尔结果(真,假或空)的表达式。理想情况下,您的表达式应该引发错误,但是MySQL会简单地将该值转换为false = 0,true <> 0的布尔值。68565不为零,因此条件为true。

因此,最后只有一行包含任意选择的标题。

答案 1 :(得分:5)

使用limit并按降序使用值

select * from table
order by value desc
limit 1

答案 2 :(得分:5)

您需要order by子句和limit子句:

SELECT title
FROM table
ORDER BY val DESC
LIMIT 1;

这将仅返回1行,如果您具有相同的较高值,则需要使用subquery

select t.*
from table t
where t.val = (select max(t1.val) from table t1)

答案 3 :(得分:3)

如果使用MySQL 8+或更高版本,我们可以使用解析函数:

WITH cte AS (
    SELECT title, value, ROW_NUMBER() OVER (ORDER BY value DESC) rn
    FROM yourTable
)

SELECT title, value
FROM cte
WHERE rn = 1;

此方法的潜在优势在于,如果我们也想找到所有可能的联系,那么只要它们发生,我们只需用ROW_NUMBER代替RANK(或者也许用{{1} }),我们可以首先取得所有联系。

答案 4 :(得分:-1)

SELECT title 
FROM t1
order by value desc
limit 1;

答案 5 :(得分:-2)

从数据库WHERE值中选择SELECT标题=(从数据库中SELECT最大值(值));