mysql의 max (length (field))


86

내가 말하면 :

select max(length(Name)) 
  from my_table

결과는 18이지만 관련 데이터도 원합니다. 그래서 내가 말하면 :

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

...작동하지 않습니다. 내가 알아낼 수없는 자기 조인이 있어야한다.

누구든지 나에게 단서를 줄 수 있습니까?


6
LENGTH () 대신 CHAR_LENGTH ()를 사용하는 것이 좋습니다. CHAR_LENGTH ()는 문자열의 길이를 문자로 반환합니다. LENGTH ()는 길이를 바이트 단위로 반환합니다. 다중 바이트 문자 세트의 경우 이러한 값은 다를 수 있으며 바이트 길이가 아닌 문자 길이에 관심이있을 수 있습니다.
Ike Walker

답변:


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

14

수정 됨, 알 수없는 max () 값에 대해 작동합니다.

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

예,하지만 name최대 길이가 18 인 우려 를 원합니다
JPro

1
ok 나는 select max(length(Name)) as num1,Name from my_table group by Name having num1 = 18첫 번째 쿼리에서 max가 18이라는 것을 알고 있기 때문에 내가 원하는 것을 얻었습니다 . 그러나 이것을 하나의 쿼리로 결합하는 방법은 무엇입니까?
JPro 2010 년

아, 오해. MS SQL에서는 select Name from my_table where length (Name) = (select max (length (Name)) from my_table)을 사용하지만 올바른 MySQL 구문이 아니라는 것이 상당히 확실합니다.
cjohn

7

좋아, 무엇을 사용하고 있는지 잘 모르겠지만 (MySQL, SLQ Server, Oracle, MS Access ..) 아래 코드를 시도해 볼 수 있습니다. W3School 예제 DB에서 작동합니다. 여기에 이것을 시도하십시오 :

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

2

사용하다:

  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)

@JPro : 설명 계획을 확인하지만 Quassnoi가 가장 최적이라고 생각합니다.
OMG Ponies

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

이것은 최대 길이를 가진 특정 열의 레코드를 제공합니다.


2

동일한 테이블에서 최대 및 최소가 모두 필요한 경우 :

    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;

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

이것은 두 개의 테이블 스캔을 포함하므로 그리 빠르지 않을 수 있습니다!


하위 쿼리의 제한은 필요하지 않습니다. max ()는 집계 연산자이며 1 개의 행만 반환합니다.
Martin


0

다음과 같은 솔루션을 사용할 수 있다고 가정합니다.

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

하지만 최적의 솔루션은 아닐 수도 있지만 ... 작동하는 것 같습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.