Max (длина (поле)) в mysql

Если я скажу:

select max(length(Name)) 
  from my_table

Я получаю результат как 18, но я также хочу получить соответствующие данные. Поэтому, если я скажу:

select max(length(Name)), 
       Name 
  from my_table

... это не работает. Я думаю, что должно быть самосоединение, которое я не могу понять.

Может ли кто-нибудь указать мне ключ?

Ответ 1

SELECT  name, LENGTH(name) AS mlen
FROM    mytable
ORDER BY
        mlen DESC
LIMIT 1

Ответ 2

Отредактировано, будет работать для неизвестных значений max():

select name, length( name )
from my_table
where length( name ) = ( select max( length( name ) ) from my_table );

Ответ 3

Хорошо, я не уверен, что вы используете (MySQL, SLQ Server, Oracle, MS Access..), но вы можете попробовать код ниже. Это работает в W3School пример БД. Вот попробуйте это:

SELECT city, max(length(city)) FROM Customers;

Ответ 4

Использование:

  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)

Ответ 5

Если вам нужны как 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;

Ответ 6

select * 
from my_table 
where length( Name ) = ( 
      select max( length( Name ) ) 
      from my_table
      limit 1 
);

Это включает в себя два сканирования таблицы, и поэтому может быть не очень быстро!

Ответ 7

Select URColumnName From URTableName Where length(URColumnName ) IN 
(Select max(length(URColumnName)) From URTableName);

Это даст вам записи в этом конкретном столбце с максимальной длиной.

Ответ 8

Я полагаю, вы могли бы использовать такое решение, как этот:

select name, length(name)
from users
where id = (
    select id
    from users
    order by length(name) desc
    limit 1
);

Возможно, не оптимальное решение... Но, похоже, работает.

Ответ 9

Используйте CHAR_LENGTH() вместо LENGTH(), как предложено в: MySQL - length() против char_length()

ВЫБЕРИТЕ имя, CHAR_LENGTH (имя) AS mlen ОТ mytable ORDER BY mlen DESC LIMIT 1