zoukankan      html  css  js  c++  java
  • SQL-字符串连接聚合函数

    原文:http://blog.csdn.net/java85140031/article/details/6820699

    问题:  

    userId  role_name         role_id 
    1         管理员                 1 
    1         编辑                  2 
    1         超级管理员           3 
    2         普通会员                4 
    3         高级会员                5 
    4         null                    null 
    很简单的数据,就是一个用户可能会对应多个角色,现在要求能用程序或者sql的方式用户和角色逗号进行分割。要求得到的数据如下: 

    userId  role_name 
    1        管理员,编辑,超级管理员 
    2        普通会员 
    3        高级会员 
    4        null

    解答:

    用程序估计是再简单不过了,数据库的话如下:

    MySQL:直接调用函数group_contact完成
    oracle10g:直接掉函数wm_concat完成
    oracle9i:麻烦点,不过主要是通过sys_connect_by_path,这个函数能树枝进行按指定字符连接,之所以产生树是因为这里面用到了Oracle的START WITH 递归成树的

    (1) MySQL 
    group_concat函数是典型的字符串连接函数,下面就为您介绍MySQL group_concat的语法,希望对您学习

    MySQL group_concat函数有所帮助。

    MySQL group_concat函数
    完整的语法如下:
    group_concat([DISTINCT] 要连接的字段 [Order BY ASC/DESC 排序字段] [Separator '分隔符'])

    我的理解就是: 后面的 group by xx 分好组之后, 然后将组内的数据连接起来,默认是逗号

    测试sql语句:

    1 insert into role VALUES(1,1,'管理员',1);
    2 insert into role VALUES(2,1,'编辑',2);
    3 insert into role VALUES(3,1,'超级管理员',3);
    4 insert into role VALUES(4,2,'普通会员',4);
    5 insert into role VALUES(5,3,'高级会员',5);

    例子: 

    select userId,group_concat(role_name,';') from role group by userId;

    result: 

    1  管理员;,编辑;,超级管理员;

    2  普通会员;

    3  高级会员;

    扩展:

    如果ORALCEMYSQL本身有提供这字符串连接聚合函数的话,楼主这个问题,其实很容易解决的,即按USERID分组后,再将同组的role_name进行字符串连接就OVER。 
    像ORALCE中wm_concat函数还不是ORACLE所有版本都有的,而像这种字符连接函数在实际编程中,是很常用的,SELECT CATSTR(role_name) FROM USER GROUP BY USERID,而这边这个 CATSTR聚合函数是自己在数据库PL/SQL实现的,具体实现方式可参见http://hi.baidu.com/xoy2129/blog/item/c7885e66a201f125ab184cea.html 
    这样CATSTR就具有通用性了

    也就是自定义函数

    参见另外一篇: oracle中用户自己创建与调用聚合函数

  • 相关阅读:
    手下有个人总是用一些小的缺点来否认你的决定的优点,如何解决这个问题? (转载)
    初等代数
    全民上网到全民织网 Web 2.0掀起人民战争
    这个sql语句:列出各门课程成绩最好的两位学生?
    在XML中发送二进制数据
    .NetFramework 数据保存与传输之序列化对象
    Duwamish学习之构架篇错误捕获
    在.NET环境中使用单元测试工具NUnit
    [翻译]XNA外文博客文章精选之fourteen
    [翻译]XNA外文博客文章精选之nine
  • 原文地址:https://www.cnblogs.com/yw0219/p/5999423.html
Copyright © 2011-2022 走看看