2014-06-09 4 views
0

나는 데이터 테이블이 있습니다카운트 행은

ID Version  Major  Minor  Revision 
    1 00000000004 00000000000 00000000012 0000000015 
    2 00000000004 00000000000 00000000012 0000000015 
    3 00000000004 00000000000 00000000013 0000000001 
    4 00000000004 00000000000 00000000013 0000000002 
    5 00000000004 00000000000 00000000013 0000000008 
    6 00000000004 00000000000 00000000013 0000000008 
    7 00000000004 00000000000 00000000014 0000000007 
    8 00000000004 00000000000 00000000014 0000000008 
    9 00000000004 00000000000 00000000014 0000000009 
    10 00000000004 00000000000 00000000014 0000000009 
    11 00000000004 00000000000 00000000014 0000000009 
    12 00000000004 00000000000 00000000014 0000000009 
    13 00000000004 00000000000 00000000014 0000000009 
    14 00000000004 00000000000 00000000014 0000000009 
    15 00000000004 00000000000 00000000014 0000000010 
    16 00000000004 00000000000 00000000014 0000000011 

나는 버전, 심각, 경미 및 개정 필드을 연결하고 버전의 중복 행 계산하려면 :

DB Version Count 
    V4.0.12.15 2 
    V4.0.13.01 1 
    V4.0.13.02 2 
    V4.0.13.08 2 
    V4.0.14.07 1 
    V4.0.14.09 6 
    V4.0.14.10 1 
    V4.0.14.11 1 

지금까지 내가 사용하여 DB 버전을 연결할 수 있습니다

SELECT CONCAT (
     'V' 
     RIGHT(LTRIM(Version) 1) 
     '.' 
     RIGHT(LTRIM(Major) 1) 
     '.' 
     RIGHT(LTRIM(Minor) 2) 
     '.' 
     RIGHT(LTRIM(Revision) 2) 
     ) AS 'DB Version' FROM DBversion; 

그러나 나는 t을 추출하는 방법을 고민하고있다 그는 DB Versions에 포함됩니다.

+0

모두 0입니까? 왜 정수를 정수로 저장하지 않습니까? – Strawberry

+0

이러한 열이 문자 유형이라면'RIGHT (Version, n)'대신에'TRIM (LEADING '0'FROM Version)'과 같은 표현식을 사용하고 싶습니다. – spencer7593

+0

불행히도 - 모든 0은 필드 저장 방법입니다. TRIM (LEADING '0'FROM Version) 팁 주셔서 감사합니다. – Woosoyan

답변

0

당신은 어려운 부분을 해결했습니다.

SELECT CONCAT(
     'V' 
     RIGHT(LTRIM(Version) 1) 
     '.' 
     RIGHT(LTRIM(Major) 1) 
     '.' 
     RIGHT(LTRIM(Minor) 2) 
     '.' 
     RIGHT(LTRIM(Revision) 2) 
     ) AS "DB Version", 
     COUNT(*) 
FROM DBversion 
GROUP BY "DB Version"; 

참고 : 나머지는 집계입니다 concat( 사이에 공백을 두지 마십시오. MySQL은 그렇게하지 않습니다. 그

select 
    version, 
    count(*) 
from (
    select 
     concat('V', concat_ws('.', 
      Version + 0, 
      Major + 0, 
      Minor + 0, 
      Revision + 0) 
     ) version 
    from DBversion 
) concatenated 
group by version 

같은

+0

SELECT CONCAT ( 'V'(선행) 버전의 '0' TRIM, '.', RIGHT (LTRIM (주요), 1), '.', RIGHT (LTRIM (부), 2- '.') , RIGHT (LTRIM (개정), 2) ) 'DB 버전' COUNT (*) AS 'DB 버전'BY DBversion 군으로부터 카운트 AS; 부여 : DB 버전, 개수 V4.0.05.00 261 – Woosoyan

0

뭔가가 매우 같은 쿼리가 매우 저조한 실적이있을 것이다,이 길을 갈하지 않는 것이 좋습니다 그러나. 더 좋은 해결책은 중간 테이블을 만들고 버전 번호를 계산 한 다음 해당 중간 테이블에서 group by이라는 쿼리를 작성하는 것입니다.

+0

감사합니다. 원하는 결과를 얻을 수 있으며 작은 테이블이므로 성능에 대해 걱정하지 않아도됩니다. 다음 문제는 결과를 올바르게 정렬하는 것입니다. – Woosoyan