数据库 将多条SQL语句查询的内容整合成为一个元组

1.情景再现

分类信息 住户 租户 快递 亲友访问
花苑 138 25 44 89
新城 34 150 78 34

以上的一张表中,假如要分别在两个住宅小区统计各类进出的人数,进出的类型可以分为是住户,租户,快递以及亲友访问四个类型。

但是实际的表设计中,住户以及租户是属于这个小区,可以直接统计出来,但是快递以及亲友访问则需要从进出记录查找。

换言之,就是表中的每个元组的数据是从多个表中查出来的,同时可能是用四条sql语句中查询出来的。使用如下表达:

①: select t.name as comunityName,

count(t.type) as ownerNumber

from  ownerTable t

②: select t.name as comunityName,

count(t.type) as rnetNumber

from  rentTable t

③: select t.name as comunityName,

count(t.type) as expressNumber

from  inviterTable t

where t.inviterType = ‘express‘

④:select t.name as comunityName,

count(t.type) as friendNumber

from  inviterTable t

where t.inviterType = friend

以上四条语句查询出来的四个结果,最终我们需要的是一个完整的元组数据类似于:

花苑 138 25 44 89

2.解决方案

利用Oracle提供的union all函数,进行查询结果的一个全连接,并且构造每一个查询结果的一个元组,sql语句如下

select comunityName,

   ownerNumber,

   rentNumber,

   expressNumber,

   friendNumber

from(  

     select t.name as comunityName,

    count(t.type) as ownerNumber,

    0 as rentNumber,

    0 as expressNumber,

    0 as friendNumber

    from  ownerTable t

    group by t.id

  union all

    select t.name as comunityName,

    0 as ownerNumber,

    count(t.type) as rentNumber,

    0 as expressNumber,

    0 as friendNumber

    from  rentTable t

    group by t.id

  unoin all

    select t.name as comunityName,

    0 as ownerNumber,

    0 as rentNumber,

    count(t.type) as expressNumber,

    0 as friendNumber

    from  inviterTable t

    where t.inviterType = ‘express‘

    group by t.id

  union all

    select t.name as comunityName,

    0 as ownerNumber,

    0 as rentNumber,

    0 as expressNumber,

    count(t.type) as friendNumber

    from  inviterTable t

    where t.inviterType = friend

    group by t.id  

  ) group by comunityName;

3.实现解读

以上的SQL语句中,针对第一步所涉及道德SQL语句,每条都补全了所需要展示的四个维度,住户,租户,快递,亲友。

每条SQL语句都会产生一个元组,但是没有数据的部分会置0,然后针对四条SQL语句的查询结果进行一个unoin操作,根据每个元组共同的一个值

comunityName进行一个元组的联接,并且列出所有的出现过的comunityName的值,如果其后续的数据没有则按照默认值补充。

时间: 2024-10-05 05:11:56

数据库 将多条SQL语句查询的内容整合成为一个元组的相关文章

树形结构表查询,只用一条SQL语句查询所有父级ID解决办法

在树形结构表查询中用得最多的就是查询指定分类的所有下级分类,这个性能比较好的解决方案是为分类加一个编码(路径)把父级的ID都拼接上,最后通过like 'x%'就能把所有下级分类select出来.但是有时也会遇到反过来,找出指定分类的所有上级分类,这个情况尤其在分销或类传销的系统中最常见,因为他们分成都是上级分成,所以要找出指定人的上级集合. 下面分享一下我的解决方案(只用一条SQL语句.不用存储过程.函数): 有下面所在的新闻分类表. ParentID为父级的ID. 下面要找出ID为52的所有上

一条SQL语句查询两表中两个字段

首先描述问题,student表中有字段startID,endID.garde表中的ID需要对应student表中的startID或者student表中的endID才能查出grade表中的name字段,这时候问题就来了,如果需要一条sql一句同时查出garde表中的两条数据怎么办?(两表的关联字段为 SID) sql="select b.name,c.name as name2 from student a,garde b,grade c where a.SID=b.SID and a.SID=c

数据库-第四章 SQL语句查询

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SQL查询的基本结构 集合运算   空值   聚集函数   嵌套子查询   数据库的修改 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ SQL查询的基本机

用一条sql语句查询出“每门”课程都大于80分的学生姓名

Name chengji fengshu张三 数学 75张三 语文 81李四 数学 90李四 语文 76王五 数学 81王五 语文 100王五 英语 90 SQL Server: select distinct [Name] from [表] where [Name] not in ( select [Name] from [表] where [fengshu]<=80) 或者 select distinct name from A minus select name from A where

用一条SQL语句 查询出每门课程都大于80分的学生姓名&quot; 的实现方式

建表: 1 create table Score( 2 name varchar(20), 3 course varchar(20), 4 score int) 5 6 go 7 8 insert Score 9 select 'HanMeimei','Chinese',81 union all 10 select 'HanMeimei','Mathematics',75 union all 11 select 'HanMeimei','History',81 union all 12 sele

涉及不同实例不同数据库的同一条sql语句

exec sp_configure 'show advanced options',1 reconfigure exec sp_configure 'Ad Hoc Distributed Queries',1 reconfigure select * from Product p inner join opendatasource('SQLOLEDB','Data Source=Macaco-Online;user ID=sa;password=sa密码;').Company.dbo.Produ

mysql(1)—— 详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中

详解一条sql语句的执行过程

SQL是一套标准,全称结构化查询语言,是用来完成和数据库之间的通信的编程语言,SQL语言是脚本语言,直接运行在数据库上.同时,SQL语句与数据在数据库上的存储方式无关,只是不同的数据库对于同一条SQL语句的底层实现不同罢了,但结果相同.这有点类似于java中接口的作用,一个接口可以有不同的实现类,不同的实现类对于接口中方法的实现方式可以不同,结果可以相同.这里SQL语言的作用就类似于java中的接口,数据库就类似于java中接口的实现类,SQL语句就类似于java接口中的方法.不同的是java中

用一条SQL语句查出每门课都大于80分的学生的姓名

用一条sql语句查询出所有课程都大于80分的学生名单: name cource score 张三 语文 81 张三 数学 75 李四 语文 76 李四 数学 90 王五 语文 81 王五 数学 100 王五 英语 90 1 SET FOREIGN_KEY_CHECKS=0; 2 3 -- ---------------------------- 4 -- Table structure for grade 5 -- ---------------------------- 6 DROP TABL