Se eu disser:
select max(length(Name))
from my_table
Recebo o resultado como 18, mas também quero os dados em questão. Então, se eu disser:
select max(length(Name)),
Name
from my_table
...não funciona. Deve haver uma auto-junção, eu acho que não consigo descobrir.
Alguém pode me dar uma pista?
Respostas:
SELECT name, LENGTH(name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
fonte
Editado, funcionará com valores máximos () desconhecidos:
select name, length( name ) from my_table where length( name ) = ( select max( length( name ) ) from my_table );
fonte
name
que tem no máximo 18select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18
, pois sei desde a primeira consulta que o máximo é 18. Mas como combinar isso para uma consulta?Ok, não tenho certeza do que você está usando (MySQL, SLQ Server, Oracle, MS Access ..) Mas você pode tentar o código abaixo. Funciona no banco de dados de exemplo W3School. Aqui, tente isto:
SELECT city, max(length(city)) FROM Customers;
fonte
Usar:
SELECT mt.name FROM MY_TABLE mt GROUP BY mt.name HAVING MAX(LENGTH(mt.name)) = 18
... supondo que você saiba o comprimento de antemão. Se não, use:
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)
fonte
Select URColumnName From URTableName Where length(URColumnName ) IN (Select max(length(URColumnName)) From URTableName);
Isso lhe dará os registros daquela coluna específica que possui o comprimento máximo.
fonte
Caso você precise de máximo e mínimo da mesma mesa:
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;
fonte
select * from my_table where length( Name ) = ( select max( length( Name ) ) from my_table limit 1 );
Isso envolve duas varreduras de tabela e, portanto, pode não ser muito rápido!
fonte
Use CHAR_LENGTH () em vez de LENGTH () como sugerido em: MySQL - length () vs char_length ()
SELECT nome, CHAR_LENGTH (nome) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
fonte
Suponho que você possa usar uma solução como esta:
select name, length(name) from users where id = ( select id from users order by length(name) desc limit 1 );
Pode não ser a solução ideal, porém ... Mas parece funcionar.
fonte