Jeśli powiem:
select max(length(Name))
from my_table
Otrzymuję wynik jako 18, ale chcę też mieć dane, o których mowa. Więc jeśli powiem:
select max(length(Name)),
Name
from my_table
...to nie działa. Chyba powinno nastąpić samołączenie, którego nie potrafię rozgryźć.
Czy ktoś może podać mi wskazówkę?
Odpowiedzi:
SELECT name, LENGTH(name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
źródło
Edytowane, będzie działać dla nieznanych wartości max ():
select name, length( name ) from my_table where length( name ) = ( select max( length( name ) ) from my_table );
źródło
name
który ma maksymalną długość 18select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18
, skoro z pierwszego zapytania wiem, że max to 18. Ale jak to połączyć w jedno zapytanie?Ok, nie jestem pewien, czego używasz (MySQL, SLQ Server, Oracle, MS Access ..) Ale możesz wypróbować poniższy kod. Działa w przykładowej bazie danych W3School. Tutaj spróbuj tego:
SELECT city, max(length(city)) FROM Customers;
źródło
Posługiwać się:
SELECT mt.name FROM MY_TABLE mt GROUP BY mt.name HAVING MAX(LENGTH(mt.name)) = 18
... zakładając, że znasz wcześniej długość. Jeśli nie, użyj:
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)
źródło
Select URColumnName From URTableName Where length(URColumnName ) IN (Select max(length(URColumnName)) From URTableName);
W ten sposób uzyskasz rekordy w tej konkretnej kolumnie, która ma maksymalną długość.
źródło
W przypadku, gdy potrzebujesz zarówno wartości maksymalnej, jak i minimalnej z tej samej tabeli:
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;
źródło
select * from my_table where length( Name ) = ( select max( length( Name ) ) from my_table limit 1 );
Obejmuje to dwa skanowanie tabeli, więc może nie być bardzo szybkie!
źródło
Użyj CHAR_LENGTH () zamiast LENGTH () zgodnie z sugestią: MySQL - length () vs char_length ()
SELECT name, CHAR_LENGTH (name) AS mlen FROM mytable ORDER BY mlen DESC LIMIT 1
źródło
Przypuszczam, że przydałoby się rozwiązanie takie jak to:
select name, length(name) from users where id = ( select id from users order by length(name) desc limit 1 );
Może nie jest to jednak optymalne rozwiązanie ... Ale wydaje się, że działa.
źródło