Si yo digo:
select max(length(Name))
from my_table
Obtengo el resultado como 18, pero también quiero los datos correspondientes. Entonces, si digo:
select max(length(Name)),
Name
from my_table
...No funciona. Debería haber una autounión, supongo, que no puedo resolver.
¿Alguien puede darme una pista?
Respuestas:
SELECT name, LENGTH(name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
fuente
Editado, funcionará para valores máximos () desconocidos:
select name, length( name ) from my_table where length( name ) = ( select max( length( name ) ) from my_table );
fuente
name
tenga una duración máxima de 18select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18
, ya que sé por la primera consulta que el máximo es 18. Pero, ¿cómo combinar esto en una sola consulta?Ok, no estoy seguro de qué estás usando (MySQL, SLQ Server, Oracle, MS Access ...) Pero puedes probar el código a continuación. Funciona en la base de datos de ejemplo de W3School. Aquí prueba esto:
SELECT city, max(length(city)) FROM Customers;
fuente
Utilizar:
SELECT mt.name FROM MY_TABLE mt GROUP BY mt.name HAVING MAX(LENGTH(mt.name)) = 18
... asumiendo que conoces la longitud de antemano. Si no lo hace, 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)
fuente
Select URColumnName From URTableName Where length(URColumnName ) IN (Select max(length(URColumnName)) From URTableName);
Esto le dará los registros en esa columna en particular que tiene la longitud máxima.
fuente
En caso de que necesite max y min de la misma tabla:
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;
fuente
select * from my_table where length( Name ) = ( select max( length( Name ) ) from my_table limit 1 );
Si esto implica dos escaneos de tabla, ¡puede que no sea muy rápido!
fuente
Use CHAR_LENGTH () en lugar de LENGTH () como se sugiere en: MySQL - length () vs char_length ()
SELECT name, CHAR_LENGTH (name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
fuente
Supongo que podrías usar una solución como esta:
select name, length(name) from users where id = ( select id from users order by length(name) desc limit 1 );
Sin embargo, puede que no sea la solución óptima ... Pero parece funcionar.
fuente