• 关键字 row_number() over (partition by)

   例如,下面的数据, 这是按照name分组后,展示property值。

  

  我们想得到这样的值;

  

  

  1.   第一步:将每一组的property标上序号
  select name,property,row_number() over (partition by name order by property desc) column_num from test

  得到的结果:

  

  partition by 后面接的就应该是将要分组的字段。如果partition by property 相当于按照property分组,那么后面的列序号column_num就是1,1,1,1,1,1,1。

  2.   第二步:按name分组后按照max或min合在一条数据中:

SELECT   NAME, MAX (DECODE (column_num, 1, property)) val1,

         MAX (DECODE (column_num, 2, property)) val2,

         MAX (DECODE (column_num, 3, property)) val3,

         MAX (DECODE (column_num, 4, property)) val4

    FROM (SELECT NAME, property, ROW_NUMBER () OVER (PARTITION BY NAME ORDER BY property DESC) column_num FROM test)

GROUP BY NAME 

  

  这样就得到了结果,如下图:

  

  

  数据就合成功了:电脑(电源、硬盘、显示器、cpu)

相机(三脚架、记忆卡、镜头)

分析一下,row_number()其实就是给每条记录返回一个数字,序号是从1开始。比如:

  SELECT NAME, property, ROW_NUMBER () OVER (ORDER BY property DESC) column_num FROM test

结果是 :

  

  

  上面的 ROW_NUMBER () OVER (PARTITION BY NAME ORDER BY property DESC),这行的意思是按照name分组再给name分组的数据进行编号。

  PG 和oracle差不多,只是pg中的decode函数不能像oracle那样用,但是可以用case...when...代替。

数据库groub by分组后,把多行数据合并成一行数据(Oracle、Postgres)的更多相关文章

  1. Oracle查询多行数据合并成一行数据

    例如: select base_id, translate (ltrim (text1, '/'), '*/', '*,') xmmc,translate (ltrim (text2, '/'), ' ...

  2. mysql中将多行数据合并成一行数据

    .1GROUP_CONCAT()中的值为你要合并的数据的字段名; SEPARATOR 函数是用来分隔这些要合并的数据的: ' '中是你要用哪个符号来分隔: 2.必须要用GROUP BY 语句来进行分组 ...

  3. SQLServer 中多行数据合并成一行数据(一个字段)

    需求:有四行数据,如下: 1.苹果 2.橘子 3.桃子 4.波罗 合并成一个字段:苹果,橘子,桃子,波罗: 需求明确之后,先弄点测试数据,上代码: --创建一个临时表 Create table #te ...

  4. 使用Notepad++将多行数据合并成一行

    1.按Ctrl+F,弹出“替换”的窗口: 2.选择“替换”菜单: 3.“查找目标”内容输入为:\r\n: 4.“替换为”内容为空: 5.“查找模式”选择为正则表达式: 6.设置好之后,点击“全部替换” ...

  5. SQL将多行数据合并成一行【转】

    转:https://blog.csdn.net/AntherFantacy/article/details/83824182 今天同事问了一个需求,就是将多行数据合并成一行进行显示,查询了一些资料,照 ...

  6. SQL SERVER将多行数据合并成一行(转载)

    昨天遇到一个SQL Server的问题:需要写一个储存过程来处理几个表中的数据,最后问题出在我想将一个表的一个列的多行内容拼接成一行 比如表中有两列数据 : ep_classes  ep_name A ...

  7. sql查询 ,多行数据合并成一行,并且显示合并后某一列的值拼接结果

    select  [value] = stuff((select ','+modmb003  from modmb detail where modmb=18 for xml path('')), 1, ...

  8. oracle 聚合函数 LISTAGG ,将多行结果合并成一行

    LISTAGG( to_char(Item_Category_Name), ',') WITHIN GROUP(ORDER BY Item_Category_Name)  -- 将 Item_Cate ...

  9. 查出了a表,然后对a表进行自查询,a表的别名t1,t2如同两张表,因为t1,t2查询的条件不一样,真的如同两张表,关联两张表,可以将两行或者多行数据合并成一行,不必使用wm_concat()函数。为了将t2表的数据全部查出来使用了右连接。

    with a as( select nsr.zgswj_dm, count(distinct nsr.djxh) cnt, 1 z from hx_fp.fp_ly fp, hx_dj.dj_nsrx ...

随机推荐

  1. was控制台无法停止应用

    问题描述: was控制台无法停止应用,只能通过停止server的方式停止: 代码实现: import org.slf4j.Logger; import org.slf4j.LoggerFactory; ...

  2. SSRF(服务端请求伪造)

  3. Apache Flink 任意jar包上传漏洞

    目前受影响版本:version 1.9.1(最新),官方未发布补丁. Apache Flink仪表板- >上传恶意的JAR- >提交新工作- >getshell 生成jar包,用nc ...

  4. vs-code 的常用插件

    最近编辑器转移至VS-Code上面了,为什么抛弃sublime呢,因为,sublime在项目逐渐变大的过程中(项目已上万行,还在不停继续变大),sublime会出现卡顿,反应缓慢,甚至未响应状态,基于 ...

  5. js对象转数组

    1.Array.from() 方法,用于数组的浅拷贝.就是将一个类数组对象或者可遍历对象转换成一个真正的数组.eg: let obj = { 0: ‘nihao‘, 1: ‘haha‘, 2: ‘ga ...

  6. 服务器去掉IE浏览器网络安全限制

  7. MysqL之数值函数

    1.CEIL() 用法:向上取整 举例: mysql> select CEIL(3.5); +-----------+ | CEIL(3.5) | +-----------+ | +------ ...

  8. XML文件解析之DOM4J解析

    1.DOM4J介绍 dom4j的官网是http://www.dom4j.org/dom4j-1.6.1/,最新的版本是1.6.1,根据官网介绍可知.dom4j是一个易用的.开源的库,应用于Java平台 ...

  9. LVS、nginx、Haproxy对比(详细)

    目录 代理软件 负载均衡产品介绍 haproxy 本文档参考 http://www.ha97.com/5646.html 代理软件 负载均衡产品介绍 市面上的负载均衡产品主要分为两种:硬件产品和软件产 ...

  10. Django中使用缓存

    settings中的配置 CACHES = { 'default': { 'BACKEND': 'django.core.cache.backends.filebased.FileBasedCache ...