• Group_Concat函数示例


    1. 函数定义:

    GROUP_CONCAT([DISTINCT] expr [,expr ...]
                 [ORDER BY {unsigned_integer | col_name | expr}
                     [ASC | DESC] [,col_name ...]]
                 [SEPARATOR str_val])

    2. 创建测试数据:

    CREATE TABLE IF NOT EXISTS `departmentweekdata` (
      `department` varchar(255) NOT NULL,
      `week` varchar(10) NOT NULL,
      `interval` tinyint(4) DEFAULT NULL,
      `number` int(11) DEFAULT NULL
    ) ENGINE=InnoDB DEFAULT CHARSET=latin1;
    
    --
    -- 插入数据 `departmentweekdata`
    --
    
    INSERT INTO `departmentweekdata` (`department`, `week`, `interval`, `number`) VALUES
    ('CAO', '2014-12', 1, 1),
    ('GBG1', '2014-12', 1, 0),
    ('CAO', '2014-12', 2, 0),
    ('GBG1', '2014-12', 2, 0),
    ('CAO', '2014-12', 3, 1),
    ('GBG1', '2014-12', 3, 0),
    ('CAO', '2014-11', 1, 2),
    ('GBG1', '2014-11', 1, 0),
    ('CAO', '2014-11', 2, 0),
    ('GBG1', '2014-11', 2, 0),
    ('CAO', '2014-11', 3, 1),
    ('GBG1', '2014-11', 3, 0),
    ('CAO', '2014-10', 1, 1),
    ('GBG1', '2014-10', 1, 0),
    ('CAO', '2014-10', 2, 2),
    ('GBG1', '2014-10', 2, 0),
    ('CAO', '2014-10', 3, 0),
    ('GBG1', '2014-10', 3, 0),
    ('CAO', '2014-09', 1, 1),
    ('GBG1', '2014-09', 1, 0),
    ('CAO', '2014-09', 2, 0),
    ('GBG1', '2014-09', 2, 0),
    ('CAO', '2014-09', 3, 0),
    ('GBG1', '2014-09', 3, 0),
    ('CAO', '2014-08', 1, 2),
    ('GBG1', '2014-08', 1, 0),
    ('CAO', '2014-08', 2, 0),
    ('GBG1', '2014-08', 2, 0),
    ('CAO', '2014-08', 3, 1),
    ('GBG1', '2014-08', 3, 0),
    ('CAO', '2014-07', 1, 1),
    ('GBG1', '2014-07', 1, 0),
    ('CAO', '2014-07', 2, 2),
    ('GBG1', '2014-07', 2, 0),
    ('CAO', '2014-07', 3, 0),
    ('GBG1', '2014-07', 3, 0),
    ('CAO', '2014-06', 1, 0),
    ('GBG1', '2014-06', 1, 0),
    ('CAO', '2014-06', 2, 1),
    ('GBG1', '2014-06', 2, 0),
    ('CAO', '2014-06', 3, 0),
    ('GBG1', '2014-06', 3, 0),
    ('CAO', '2014-05', 1, 0),
    ('GBG1', '2014-05', 1, 0),
    ('CAO', '2014-05', 2, 1),
    ('GBG1', '2014-05', 2, 0),
    ('CAO', '2014-05', 3, 0),
    ('GBG1', '2014-05', 3, 0),
    ('CAO', '2014-04', 1, 1),
    ('GBG1', '2014-04', 1, 0),
    ('CAO', '2014-04', 2, 0),
    ('GBG1', '2014-04', 2, 0),
    ('CAO', '2014-04', 3, 0),
    ('GBG1', '2014-04', 3, 0),
    ('CAO', '2014-03', 1, 0),
    ('GBG1', '2014-03', 1, 0),
    ('CAO', '2014-03', 2, 0),
    ('GBG1', '2014-03', 2, 0),
    ('CAO', '2014-03', 3, 1),
    ('GBG1', '2014-03', 3, 0);

    2. 根据部门,间隔;将数量列组合成一个字符串;

    SELECT 
    Temp.`department`
    ,`Temp`.interval
    ,group_concat(number) AS TenWeekString
    FROM `weekdata` Temp
    GROUP BY Temp.`department`,Temp.`interval`;

    查询结果:

    CAO 1 1,1,1,0,1,2,2,0,0,1
    CAO 2 0,0,1,1,2,0,2,0,0,0
    CAO 3 1,1,0,0,0,1,0,0,1,0
    GBG1 1 0,0,0,0,0,0,0,0,0,0
    GBG1 2 0,0,0,0,0,0,0,0,0,0
    GBG1 3 0,0,0,0,0,0,0,0,0,0

    3. 同样的查询, SEPARATOR设定字符串的分隔符:

    SELECT 
        Temp.`department`
        ,`Temp`.interval
        ,Group_Concat(number SEPARATOR '|') AS TenWeekString
    FROM `weekdata` Temp
    GROUP BY Temp.`department`,Temp.`interval`;


    查询结果:

    CAO 1 1|1|1|0|1|2|2|0|0|1
    CAO 2 0|0|1|1|2|0|2|0|0|0
    CAO 3 1|1|0|0|0|1|0|0|1|0
    GBG1 1 0|0|0|0|0|0|0|0|0|0
    GBG1 2 0|0|0|0|0|0|0|0|0|0
    GBG1 3 0|0|0|0|0|0|0|0|0|0

    4.获得经排序的字符串:

    SELECT 
        Temp.`department`
        ,`Temp`.interval
        ,Group_Concat(number ORDER BY `temp`.`week` ASC SEPARATOR '|') AS TenWeekString
    FROM `weekdata` Temp
    GROUP BY Temp.`department`,Temp.`interval`;

    查询结果:

    CAO 1 0|1|0|0|1|2|1|1|2|1
    CAO 2 0|0|1|1|2|0|0|2|0|0
    CAO 3 1|0|0|0|0|1|0|0|1|1
    GBG1 1 0|0|0|0|0|0|0|0|0|0
    GBG1 2 0|0|0|0|0|0|0|0|0|0
    GBG1 3 0|0|0|0|0|0|0|0|0|0

    5.去除重复的值:

    SELECT 
        Temp.`department`
        ,`Temp`.interval
        ,Group_Concat(DISTINCT `number` ORDER BY `temp`.`week` ASC SEPARATOR '|') AS TenWeekString
    FROM `weekdata` Temp
    GROUP BY Temp.`department`,Temp.`interval`;

    查询结果:

    CAO 1 0|2|1
    CAO 2 1|2|0
    CAO 3 1|0
    GBG1 1 0
    GBG1 2 0
    GBG1 3 0

    6.设定输出字符串的最大长度:

     查看最大长度:

    SELECT @@global.group_concat_max_len as `max_length`;

    查询结果:

    1024

     设定最大长度(最大值不能超过4294967295):

    SET GLOBAL group_concat_max_len=1024000000;
  • 相关阅读:
    9.算术运算符
    7.字符串格式化
    下载和配置JDK
    Set-常用API及详解
    List-ApI及详解
    电路交换、报文交换、分组交换比较
    集合之List—ArrayList
    java的getClass()函数
    Object类、包装类、内部类详解
    接口的探究
  • 原文地址:https://www.cnblogs.com/ucos/p/3631223.html
Copyright © 2020-2023  润新知