Как выбрать заголовок, который имеет наибольшее значение? - PullRequest
0 голосов
/ 25 января 2019

Итак, в такой простой таблице, как эта, как я могу выбрать заголовок с наибольшим значением?

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

Как и в этом случае title3 имеет наибольшее значение, поэтому я бы хотел выбрать title3 с помощью кода SQL, но я не знаю, как

Что я пробовал:

SELECT title FROM table HAVING MAX(value);

Я думал, что так я могу это сделать, но это не работает

Возможно, это не так сложно, но я совершенно новичок в SQL

Я бы очень признателен, если бы кто-то мог помочь мне с этим

Ответы [ 6 ]

0 голосов
/ 25 января 2019
SELECT title 
FROM t1
order by value desc
limit 1;
0 голосов
/ 25 января 2019

ВЫБРАТЬ заголовок ИЗ базы данных, ГДЕ значение = (ВЫБРАТЬ макс. (Значение) ИЗ базы данных);

0 голосов
/ 25 января 2019

При использовании 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 (или, может быть, DENSE_RANK), и мы можем получить все связи в первую очередь.

0 голосов
/ 25 января 2019

Используйте подзапрос, если вы хотите разрешить нескольким заголовкам использовать одно и то же максимальное значение:

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

РЕДАКТИРОВАТЬ: Что касается вашего собственного запроса:

Вы объединяете все строкик одному, запрашивая MAX(value) без предложения GROUP BY.Но затем вы выбираете title.Который?Вы не говорите СУБД, и поэтому запрос на самом деле является недействительным SQL.MySQL, однако, допускает это скольжение и тихо применяет ANY_VALUE к title, а это не то, что вам нужно.Вам нужен конкретный.

В вашем запросе есть еще один недостаток: в HAVING MAX(value) у вас нет сравнения (как, например, в HAVING MAX(value) > 1000).Но СУБД ожидает выражение с логическим результатом (true, false или null).В идеале ваше выражение должно вызывать ошибку, но MySQL просто преобразует значение в логическое значение с false = 0, true <> 0. 68565 не равно нулю, поэтому условие истинно.

Таким образом, в итоге вы получите одинстрока с произвольно выбранным заголовком.

0 голосов
/ 25 января 2019

Вам нужно 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)
0 голосов
/ 25 января 2019

используйте limit и упорядочите по значению в порядке убывания

select * from table
order by value desc
limit 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...