Если я говорю:
select max(length(Name))
from my_table
Я получаю результат 18, но мне нужны и соответствующие данные. Итак, если я скажу:
select max(length(Name)),
Name
from my_table
...это не работает. Я думаю, должно быть самосоединение, которое я не могу понять.
Кто-нибудь может дать мне подсказку?
Ответы:
SELECT name, LENGTH(name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
источник
Отредактировано, будет работать для неизвестных значений max ():
select name, length( name ) from my_table where length( name ) = ( select max( length( name ) ) from my_table );
источник
name
лица имели максимальную длину 18select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18
, поскольку я знаю из первого запроса, что max равно 18. Но как объединить это в один запрос?Хорошо, я не уверен, что вы используете (MySQL, SLQ Server, Oracle, MS Access ..), но вы можете попробовать приведенный ниже код. Он работает в базе данных W3School. Вот попробуйте это:
SELECT city, max(length(city)) FROM Customers;
источник
Использование:
SELECT mt.name FROM MY_TABLE mt GROUP BY mt.name HAVING MAX(LENGTH(mt.name)) = 18
... при условии, что вы заранее знаете длину. Если вы этого не сделаете, используйте:
SELECT mt.name FROM MY_TABLE mt JOIN (SELECT MAX(LENGTH(x.name) AS max_length FROM MY_TABLE x) y ON y.max_length = LENGTH(mt.name)
источник
Select URColumnName From URTableName Where length(URColumnName ) IN (Select max(length(URColumnName)) From URTableName);
Это даст вам записи в этом конкретном столбце, который имеет максимальную длину.
источник
Если вам нужны как max, так и min из одной таблицы:
select * from ( (select city, length(city) as maxlen from station order by maxlen desc limit 1) union (select city, length(city) as minlen from station order by minlen,city limit 1))a;
источник
select * from my_table where length( Name ) = ( select max( length( Name ) ) from my_table limit 1 );
Это включает в себя два сканирования таблицы, и это может быть не очень быстро!
источник
Используйте CHAR_LENGTH () вместо LENGTH (), как предлагается в: MySQL - length () vs char_length ()
ВЫБЕРИТЕ имя, CHAR_LENGTH (имя) КАК mlen FROM mytable ORDER BY mlen DESC LIMIT 1
источник
Я полагаю, вы могли бы использовать такое решение, как это:
select name, length(name) from users where id = ( select id from users order by length(name) desc limit 1 );
Возможно, это не оптимальное решение ... Но, похоже, работает.
источник