精华内容
下载资源
问答
  • oracle 将查询结果合并

    万次阅读 2018-09-07 09:41:00
    首先要区分一个概况,多个查询结果分两种,一种是一条sql查询多个结果,还有一种是多条sql语句查询出多个结果。  先看第一个,一条语句查询出多个结果,将多个结果合并成一条记录:  在oracle中有一个wm_concat...

           首先要区分一个概况,多个查询结果分两种,一种是一条sql查询多个结果,还有一种是多条sql语句查询出多个结果。

           先看第一个,一条语句查询出多个结果,将多个结果合并成一条记录:

           在oracle中有一个wm_concat()函数。

    oracle wm_concat(column)函数使我们经常会使用到的,下面就教您如何使用oraclewm_concat(column)函数实现字段合并

    如:

    shopping:

    -----------------------------------------

    u_id       goods            num

    ------------------------------------------

    1                苹果                2

    2                 梨子               5

    1                 西瓜               4

    3                 葡萄               1

    3                香蕉                1

    1               橘子                 3

    =======================

    想要的结果为:

    --------------------------------

    u_id          goods_sum

    ____________________

    1              苹果,西瓜,橘子

    2              梨子

    3              葡萄,香蕉

    ---------------------------------

    select u_id, wmsys.wm_concat(goods) goods_sum   from shopping   group by u_id  

    想要的结果2:

    --------------------------------

    u_id          goods_sum

    ____________________

    1              苹果(2斤),西瓜(4斤),橘子(3斤)

    2              梨子(5斤)

    3              葡萄(1斤),香蕉(1斤)

    ---------------------------------

    使用oracle wm_concat(column)函数实现:

    select u_id, wmsys.wm_concat(goods || '(' || num || '斤)' ) goods_sum   from shopping   group by u_id。

    以上案例借鉴于:https://www.cnblogs.com/qianyuliang/p/6649983.html

     

    接下来看将多个语句的查询结果合并:

    oracle 中有union() union all()函数:

    下面我举个栗子:

    对这个概念理解可能会有些模糊。我们通过实例来讲解,首先创建一个表Student,插入一些相应的测试数据。sql语句如下:

    复制代码

    drop table student;
    
    create table student
    
    (
    
    id int primary key,
    
    name nvarchar2(50) not null,
    
    score number not null
    
    );
    
    insert into student values(1,'Aaron',78);
    
    insert into student values(2,'Bill',76);
    
    insert into student values(3,'Cindy',89);
    
    insert into student values(4,'Damon',90);
    
    insert into student values(5,'Ella',73);
    
    insert into student values(6,'Frado',61);
    
    insert into student values(7,'Gill',99);
    
    insert into student values(8,'Hellen',56);
    
    insert into student values(9,'Ivan',93);
    
    insert into student values(10,'Jay',90);
    
    commit;

    复制代码

    3、测试 union 命令的结果集,sql语句如下:

    复制代码

    select *
    
    from student
    
    where id < 4
    
    union
    
    select *
    
    from student
    
    where id > 2 and id < 6

    复制代码

    4、结果将是:

          1    Aaron    78

          2    Bill    76

          3    Cindy    89

          4    Damon    90

          5    Ella    73

    5、如果将union换成union all连接两个结果集,则返回结果是:

                 1    Aaron    78

        2    Bill    76

        3    Cindy    89

        3    Cindy    89

        4    Damon    90

        5    Ella    73

     

             小结: 可以看到,Union和Union All的区别之一在于对重复结果的处理。接下来我们将两个子查询的顺序调整一下,改为

     

    --Union

    复制代码

    select *
    
    from student
    
    where id > 2 and id < 6
    
    union
    
    select *
    
    from student
    
    where id < 4

    复制代码

    看看执行结果是否和你期望的一致?

    --Union All

     

    复制代码

    select *
    
    from student
    
    where id > 2 and id < 6
    
    union all
    
    select *
    
    from student
    
    where id < 4

    复制代码

     

        那么这个呢?答案是一模一样的~

    6、据此我们可知,union和union all 区别在于在于对排序的处理。Union All将按照关联的次序组织数据,而Union将进行依据一定规则进行排序。那么这个排序规则是?我们换个查询方式看看:

     

    复制代码

    select score,id,name
    
    from student
    
    where id > 2 and id < 6
    
    union
    
    select score,id,name
    
    from student
    
    where id < 4

    复制代码

     

    结果如下:

        73    5    Ella

        76    2    Bill

        78    1    Aaron

        89    3    Cindy

        90    4    Damon

    和我们预料的一致:将会按照字段的顺序进行排序。之前我们的查询是基于id,name,score的字段顺序,那么结果集将按照id优先进行排序;而现在新的字段顺序也改变了查询结果的排序。并且,是按照给定字段a,b,c...的顺序进行的order by。即结果是order by a,b,c...........的。我们看下一个查询:

     

    复制代码

    select score,id,name
    
    from student
    
    where id > 2
    
    union
    
    select score,id,name
    
    from student
    
    where id < 4

    复制代码

     

    结果如下:

        56    8    Hellen

        61    6    Frado

        73    5    Ella

        76    2    Bill

        78    1    Aaron

        89    3    Cindy

        90    4    Damon

        90    10    Jay

        93    9    Ivan

        99    7    Gill

            可以看到,对于score相同的记录,将按照下一个字段id进行排序。如果我们想自行控制排序,是不是用order by指定就可以了呢?答案是肯定的,不过在写法上有需要注意的地方:

     

    复制代码

    select score,id,name
    
    from student
    
    where id > 2 and id < 7
    
    union
    
    select score,id,name
    
    from student
    
    where id < 4
    
    union
    
    select score,id,name
    
    from student
    
    where id > 8
    
    order by id desc

    复制代码

     

         order by子句必须写在最后一个结果集里,并且其排序规则将改变操作后的排序结果。对于Union、Union All都有效。

    7、注意:

        1,Union可以对字段名不同但数据类型相同的结果集进行合并;

        2,如果字段名不同的结果集进行Union,那么对此字段的Order by子句将失效。

        这里一起总结一下:

        Union,对两个结果集进行并集操作,不包括重复行,同时进行默认规则的排序;

        Union All,对两个结果集进行并集操作,包括重复行,不进行排序;2016-12-23

        可以在最后一个结果集中指定Order by子句改变排序方式

    上面这个栗子我是从https://www.cnblogs.com/yuanchaoyong/p/6213885.html获取到的。

    谢谢两位博主的分享。

    展开全文
  • sql之多查询结果合并

    千次阅读 2019-03-28 20:51:35
    sql之多查询结果合并 根据需求查询,出现个结果集,而且没有交集,但数据类型一样,进行合并; 语法: UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2; UNION ALL:不去除重复记录,例如:...

    sql之多查询结果合并

    根据需求查询,出现多个结果集,而且没有交集,但数据类型一样,进行合并;

    语法:

    1. UNION:去除重复记录,例如:SELECT * FROM t1 UNION SELECT * FROM t2;
    2. UNION ALL:不去除重复记录,例如:SELECT * FROM t1 UNION ALL SELECT * FROM t2

    代码:

    val conf = new SparkConf().setAppName("").setMaster("local")
    val spark = SparkSession.builder().config(conf).getOrCreate()
    import spark.implicits._
    val rdd = spark.read.textFile("f:/ab/input/c.txt").map(_.split("[ \t]+")).map(x => (x(0), x(1).toInt))
    var df = rdd.toDF("a1", "a2")
    df.createOrReplaceTempView("stu")
    //  println("")
    
    
    spark.sql("select a1,count(a1) c1 from stu group by a1").show
    println("统计出每个用户的粉丝数量,按照粉丝数量排序并输出")
    spark.sql("select a2,count(a2) c2 from stu group by a2 order by c2 desc").show
    
    
    //  SELECT * FROM t1 UNION SELECT * FROM t2
    println("请统计出一共有多少个不同的ID  ok")
    spark.sql("select count(a1) from (select a1,count(a1) c1 from stu group by a1     union        select a2,count(a2) c2 from stu group by a2 order by c1 desc) zong").show
    println("统计出每个ID出现的次数")
    spark.sql("select a1,count(a1) c1 from stu group by a1     union        select a2,count(a2) c2 from stu group by a2 order by c1 desc").show
    

    运行结果:

    +--------+---+
    |      a1| c1|
    +--------+---+
    |11111111|  9|
    |11111113|  7|
    |11111112|  7|
    +--------+---+
    统计出每个用户的粉丝数量,按照粉丝数量排序并输出
    +--------+---+
    |      a2| c2|
    +--------+---+
    |12743457|  3|
    |13256236|  3|
    |10000001|  3|
    |12356363|  2|
    |34232443|  2|
    |10000032|  2|
    |16386587|  2|
    |13426275|  2|
    |19764388|  1|
    |12357365|  1|
    |12364375|  1|
    |32435546|  1|
    +--------+---+
    请统计出一共有多少个不同的ID  ok
    +---------+
    |count(a1)|
    +---------+
    |       15|
    +---------+
    统计出每个ID出现的次数
    +--------+---+
    |      a1| c1|
    +--------+---+
    |11111111|  9|
    |11111113|  7|
    |11111112|  7|
    |10000001|  3|
    |12743457|  3|
    |13256236|  3|
    |13426275|  2|
    |10000032|  2|
    |34232443|  2|
    |12356363|  2|
    |16386587|  2|
    |32435546|  1|
    |12364375|  1|
    |19764388|  1|
    |12357365|  1|
    +--------+---+
    
    展开全文
  • SQL为查询结果加上序号(ROW_NUMBER) 合并多查询结果
  • Oracle 查询语句结果合并

    万次阅读 2016-01-29 17:16:15
    有三个不同的查询语句 1: select year_mon,sum(gasmon) from a where id='HBsRf0t6UI' and class=11 group by year_mon 2: select year_mon,sum(wellgasmon) from b where id='HBsRf0t6UI' and class=11 ...


    有三个不同的查询语句 1:

    select year_mon,sum(gasmon) 
    from a 
    where id='HBsRf0t6UI' 
    and class=11 
    group by year_mon 
    2:
    select year_mon,sum(wellgasmon) 
    from b 
    where id='HBsRf0t6UI' 
    and class=11 
    group by year_mon
    3:
    select year_mon,sum(gasprodmon) 
    from c 
    where id='HBsRf0t6UI' 
    and class=11 
    group by year_mon 
    希望能显示出下面的效果:
    year_mon sum(gasmon) sum(wellgasmon) sum(gasprodmon) 
    200702 122 222 123 
    200703 333 234 342 
    200704 0 2334 0 
    200705 324 2342 234 
    这样的效果也行。 问题解决
    SELECT year_mon, SUM (gasmon), SUM (wellgasmon), SUM (gasprodmon)
     FROM (SELECT year_mon, SUM (gasmon) gasmon, 0 wellgasmon, 0 gasprodmon
     FROM a
     WHERE ID = 'HBsRf0t6UI' AND CLASS = 11
     GROUP BY year_mon
     UNION ALL
     SELECT year_mon, 0, SUM (wellgasmon), 0
     FROM b
     WHERE ID = 'HBsRf0t6UI' AND CLASS = 11
     GROUP BY year_mon
     UNION ALL
     SELECT year_mon, 0, 0, SUM (gasprodmon)
     FROM c
     WHERE ID = 'HBsRf0t6UI' AND CLASS = 11
     GROUP BY year_mon)
    GROUP BY year_mon

    真实应用

    SELECT
    	bbb 月份,
    	SUM (aaa),
    	SUM (ccc)
    FROM
    	(
    		SELECT
    			TO_CHAR (b.CREATE_TIME, 'yyyy-mm') bbb,
    			COUNT (b. ID) aaa,
    			0 ccc
    		FROM
    			xxx.ORDER_ b
    		WHERE
    			b.PAY_AMOUNT IS NULL
    		GROUP BY
    			TO_CHAR (b.CREATE_TIME, 'yyyy-mm')
    		UNION ALL
    			SELECT
    				TO_CHAR (c.CREATE_TIME, 'yyyy-mm'),
    				0,
    				COUNT (c. ID) ccc
    			FROM xxx.ORDER_ c <span style="font-family: Arial, Helvetica, sans-serif;">WHERE</span>
    				c.state = - 1
    			GROUP BY
    				TO_CHAR (c.CREATE_TIME, 'yyyy-mm')
    	)
    GROUP BY
    	bbb
    ORDER BY
    	bbb;
    

    
    

    
    
    展开全文
  • 查询结果合并问题

    千次阅读 2017-06-28 18:18:48
    问题:我要统计本公司每...思路:单独对投标和中标进行分组,然后使用sql的union操作符联合两个结果集 sql: SELECT SUM(num1),SUM(num2),M FROM (SELECT NVL(COUNT(*),0) AS num1, 0 AS NUM2, TO_CHAR( pp1.TE

    问题:我要统计本公司每个月投标和中标的个数,而投标和中标的时间是单独维护的,就一直纠结怎么把月份统一到一起

    思路:单独对投标和中标进行分组,然后使用sql的union操作符联合两个结果集

    sql:

    SELECT 
    	SUM(num1),SUM(num2),M
    FROM (SELECT
    	NVL(COUNT(*),0) AS num1,
    	0 AS NUM2,
    	TO_CHAR( pp1.TENDER_TIME, 'mm' ) AS m
    FROM
    	P_PROJECT_ENGIN pp1
    WHERE
    	pp1.TENDER_STATUS = 'TB_Y'
    	AND pp1.TENDER_TIME IS NOT NULL
    GROUP BY
    	TO_CHAR( pp1.TENDER_TIME, 'mm' )
    UNION ALL 
    SELECT
    	0 AS num1, COUNT(*) AS num2,
    	TO_CHAR( pp2.TENDER_REVIEW_STIME, 'mm' ) m
    FROM
    	P_PROJECT_ENGIN pp2
    WHERE
    	pp2.TENDER_REVIEW_STIME IS NOT NULL
    GROUP BY
    	TO_CHAR( pp2.TENDER_REVIEW_STIME, 'mm' )) A
    	GROUP BY a.m

    展开全文
  • 我要如何将这三个查询出的数据合并成行的样子显示,如A.FID,A.FNAME,B.FDEPT,B.FSE,C.ORDER,C.FTER,C.CLUSE这样,就是给她将这些三个不同的结果集放一起,他们有多少条数据就显示多少条, ...
  • oracle 查询语句结果合并

    千次阅读 2010-11-03 11:33:00
    在开发环境中遇到这样关于数据库的问题 有三个不同的查询语句 1: select year_mon,sum(gasmon) from a where id='HBsRf0t6UI' and class=11 group by year_mon ...
  • 两张表均查询出第一行数据,那么两条命令同时执行会查询出两个结果,现在需要将表B中的2、4、6、8、10行数据填充进表A空的2、4、6、8、10中,而11-15列因表A已查询出,所以不再填充,将两条命令产生的结果合并为一条...
  • 查询_合并结果

    2019-09-11 06:59:26
    合并结果集 union 去除重复并且合并 ... 技巧: 要求合并结果集中 列的类型和 列的数量必须相同 create table test1( tid number(2), tname varchar2(20) ); insert into test1 values(1,...
  • oracle 查询语句结果合并

    千次阅读 2015-05-27 18:47:50
    1.oracle 查询语句结果合并 在开发环境中遇到这样关于数据库的问题 有三个不同的查询语句  1:  select year_mon,sum(gasmon)  from a  where id='HBsRf0t6UI'  and class=11  group by year_...
  • 要实现个规则查询条件符合的适配,最终将查询结果合并展示出来,并标注是哪个规则的结果;[/size][/color] [b]Mysql例子[/b] [code="sql"] --合并重复行 select * from A union sel...
  • 话不说,先上表结构和数据 委托人表: SELECT [F_Id] ,[F_ReportId] ,[F_Name] FROM [F_Client_Info] 表数据及结构如下图所示: 项目表: SELECT [F_Id] ,[F_ReportNo] ,[F_ReportName] FROM [Report_Info...
  • 先上效果 SELECT a.id,a.a_name,(SELECT GROUP_CONCAT(s_name) FROM s_test WHERE FIND_IN_SET(id,a.s_value)) FROM a_test a 表1 表2 问题:表1中s_value存的是表2的id,想不经过程序的for循环直接将id转换为...
  • 例子:(select product_id from ald_product_favorite order by product_id desc limit 60) union (select product_id from ald_fenxiao order by product_id desc limit 60) LIMIT 0,21、个表用union 连接 或过滤...
  • mysql中的多行查询结果合并成一个 SELECT GROUP_CONCAT(md.data1) FROM DATA md,contacts cc WHERE md.conskey=cc.id AND md.mimetype_id= 5 AND md.user_id=17: 利用函数:group_concat(),实现一个ID对应个...
  • SQL合并查询结果

    2016-12-09 10:52:00
    两表合并查询,并同时展示及分页SELECT a.* FROM ( ( SELECT punycode, `domain`, 'Success' AS state, add_time, ...
  • java 线程 合并多查询结果

    千次阅读 2018-10-08 10:54:00
    场景:假如你突然想做饭,但是没有厨具,也没有食材。...但是,子线程执行的结果是要返回厨具的,而run方法是没有返回值的。所以,这才是难点,需要好好考虑一下。 模拟代码: 1 package test; 2 3 import...
  • 查询 分类: * 合并结果集 * 连接查询 内连接 外链接 全连接 * 子查询【1】合并结果集 * 要求被合并的表中,列数相同,列的类型要一一
  • MySql 将查询结果多合并成一行GROUP_CONCAT GROUP_CONCAT(expr) 该函数返回带有来自一个组的连接的非NULL值的字符串结果。其完整的语法如下所示: GROUP_CONCAT([DISTINCT] expr [,expr ...] [ORDER ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,146
精华内容 858
关键字:

查询多结果合并