计算重复连接字段的行数

时间:2014-06-09 20:51:48

标签: mysql

我有一张数据表:

    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

我想连接Version,Major,Minor和Revision字段并计算版本的重复行:

    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

到目前为止,我可以使用以下方法连接数据库版本:

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

但我正在努力解决如何提取数据库版本的计数。

2 个答案:

答案 0 :(得分: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";

注意:请勿在{{1​​}}和concat之间留出空格。 MySQL并不喜欢这样。

答案 1 :(得分:0)

这样的事情

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

然而,强烈建议不要采用这种方式,因为这样的查询性能会非常差。 更好的解决方案是创建中间表,计算版本号,然后从该中间表中使用group by进行查询。