PostgreSQL分类汇总方法计算机等级考试

文章作者 100test 发表时间 2010:01:01 08:29:12
来源 100Test.Com百考试题网


  我们知道MySQL中有分类汇总函数GROUP_CONCAT来实现将组内相关值的连接,但是在PostgreSQL没有此类的函数,但是我们可以使用以下两种方法来方便的达到我们的目的:
  我们首先创建一个测试表,并插入一些测试数据:
  create table test(id int,name varchar(100)).
  insert into test values(1,aa).
  insert into test values(1,bb).
  insert into test values(2,cc).
  insert into test values(3,dd).
  insert into test values(2,ff).
  1.使用数组函数两组内的列表转换成数组
  0select id,array_to_string(
  array(0select name from test where id=a.id),,)
  from test a
  group by id.
  --结果
  3 | dd
  2 | cc,ff
  1 | aa,bb
  是不是看起来非常的简单呢,呵呵,非常的cool!
  2.使用自定义的聚集函数
  PostgreSQL除了提供给我们的一些预定义函数之外,还有创建聚集函数的DDL语句,非常的灵活!
  --首先创建一个状态传递函数:实现将统计结果传递连接
  create function pg_concat( text, text ) returns text as
  begin
  if $1 isnull then
  return $2.
  else
  return $1 || $2.
  end if.
  end. language plpgsql.
  --创建一个最终的结果函数:实现将最后一个连接符号清除
  create function pg_concat_fin(text) returns text as
  begin
  return substr($1,1,length($1)-1).
  end. language plpgsql.
  --创建聚集函数,入口参数basetype:text,状态传递函数:pg_concat,状态变量类型:text,结果函数finalfunc:pg_concat_fin
  create aggregate pg_concat (
  basetype = text,
  sfunc = pg_concat,
  stype = text,
  finalfunc = pg_concat_fin).
  --使用聚集函数进行统计:
  0select id,pg_concat(name||,)
  from test
  group by id.
  --结果
  3 | dd
  2 | cc,ff
  1 | aa,bb
  和第一种方法得到的结果是一样的,非常的方便。

  编辑特别推荐:

  ·计算机三级的四个类别看看你适合哪个

  ·全国计算机等考三级数据库模拟试题及参考答案

  ·全国计算机等级考试三级数据库技术训练题



相关文章


键盘日常维护小常识计算机等级考试
认识鼠标和键盘计算机等级考试
选购鼠标的几个要点计算机等级考试
专业化操作2007文档审阅技巧计算机等级考试
PostgreSQL分类汇总方法计算机等级考试
不选择PostgreSQL地五个反驳缘由计算机等级考试
备份PostgreSQL和MySQL数据库计算机等级考试
在PHP5中使用PDO访问SQLite3计算机等级考试
显卡故障问题处理计算机等级考试
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛