论坛首页 招聘求职论坛

各位坛子里的兄弟来看看这个面试题。

浏览 12272 次
精华帖 (0) :: 良好帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2011-09-26  
TheMatrix 写道
刚在mysql里试了下:
mysql> user test;
mysql> select userid,group_contact(role_name) from userrole group by userid;
ERROR 1305 (42000): FUNCTION test.group_contact does not exist
mysql> select * from userrole;
+------------+--------+------------+---------+
| userRoleId | userid | role_name  | role_id |
+------------+--------+------------+---------+
|          1 |      1 | 管理员     |       1 |
|          2 |      1 | 编辑       |       2 |
|          3 |      1 | 超级管理员 |       3 |
|          4 |      2 | 普通会员   |       4 |
|          5 |      3 | 高级会员   |       5 |
|          6 |      4 |            |       0 |
+------------+--------+------------+---------+

为什么出现:ERROR 1305 (42000): FUNCTION test.group_contact does not exist ???


group_concat 拼错了

示例:
http://www.java2s.com/Tutorial/MySQL/0320__Aggregate-Functions/GROUPCONCATexprreturnsastringresultwiththeconcatenatednonNULLvaluesfromagroup.htm
0 请登录后投票
   发表时间:2011-09-26  
oracle 的话 使用 decode函数搞定
0 请登录后投票
   发表时间:2011-09-26  
很显然,需要使用聚集函数,类似sum()这样的,不过这个聚集函数功能是将String 连接起来,如果数据库有直接使用,我没记错的话oracle9i是没有的,不过可以参考oracle的文档自己实现一个。
0 请登录后投票
   发表时间:2011-09-26  
kelloKitty 写道
帖子别沉了。没有人知道吗?

SELECT Userid, LTRIM(SYS_CONNECT_BY_PATH( role_name , ','), ',') AS NAMES
  FROM (SELECT userid,
               role_name,
               ROW_NUMBER() OVER(PARTITION BY userid ORDER BY role_name) AS RN,
               COUNT(*) OVER(PARTITION BY userid) AS CNT
          FROM 表名
      )
WHERE LEVEL = CNT
START WITH RN = 1
CONNECT BY PRIOR userid = userid
       AND PRIOR RN = RN - 1;
0 请登录后投票
论坛首页 招聘求职版

跳转论坛:
Global site tag (gtag.js) - Google Analytics