Si je dis:
select max(length(Name))
from my_table
J'obtiens le résultat 18, mais je veux aussi les données concernées. Donc si je dis:
select max(length(Name)),
Name
from my_table
...ça ne marche pas. Il devrait y avoir une auto-adhésion, je suppose, que je suis incapable de comprendre.
Quelqu'un peut-il me donner un indice?
Réponses:
SELECT name, LENGTH(name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
la source
Modifié, fonctionnera pour les valeurs max () inconnues:
select name, length( name ) from my_table where length( name ) = ( select max( length( name ) ) from my_table );
la source
name
qui a une longueur maximale de 18select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18
, car je sais depuis la première requête que le maximum est de 18. Mais comment combiner cela en une seule requête?Ok, je ne suis pas sûr de ce que vous utilisez (MySQL, SLQ Server, Oracle, MS Access ..) Mais vous pouvez essayer le code ci-dessous. Cela fonctionne dans l'exemple DB de W3School. Essayez ici ceci:
SELECT city, max(length(city)) FROM Customers;
la source
Utilisation:
SELECT mt.name FROM MY_TABLE mt GROUP BY mt.name HAVING MAX(LENGTH(mt.name)) = 18
... en supposant que vous connaissez la longueur à l'avance. Si vous ne le faites pas, utilisez:
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)
la source
Select URColumnName From URTableName Where length(URColumnName ) IN (Select max(length(URColumnName)) From URTableName);
Cela vous donnera les enregistrements dans cette colonne particulière qui a la longueur maximale.
la source
Au cas où vous auriez besoin à la fois de max et min de la même table:
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;
la source
select * from my_table where length( Name ) = ( select max( length( Name ) ) from my_table limit 1 );
Cela implique deux scans de table, et donc peut-être pas très rapide!
la source
Utilisez CHAR_LENGTH () au lieu de LENGTH () comme suggéré dans: MySQL - length () vs char_length ()
SELECT nom, CHAR_LENGTH (nom) AS mlen FROM ma table ORDER BY mlen DESC LIMIT 1
la source
Je suppose que vous pouvez utiliser une solution telle que celle-ci:
select name, length(name) from users where id = ( select id from users order by length(name) desc limit 1 );
Ce n'est peut-être pas la solution optimale, cependant ... Mais semble fonctionner.
la source