如何将多个SQL查询统计结果一次显示出来

我们经常会碰到各种分类统计,有时需要将这些统计结果一次显示出来,并计算分类统计占总量的比例,例如:一段时间内每日设备销售

我们经常会碰到各种分类统计,有时需要将这些统计结果一次显示出来,并计算分类统计占总量的比例,例如:一段时间内每日设备销售总量、台式机销量、笔记本销量等,我的工作中也碰到类似问题,我们需要统计一段时间内邮件收寄总量、自收总量、妥投总量、自投总量和自收自投总量等,以统计2011年10月16-22日合肥和芜湖到安庆邮件为例,其查询语句如下:

–收寄总量:
select a.clct_date rq,b.city sjj,d.city jdj,count(*) sjzl from tb_evt_mail_clct a,tb_jg b,(select distinct city,xs_code from sncn_zd_jg) d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and b.zj_code=a.clct_bureau_org_code and d.xs_code=substr(a.rcv_area,1,4)
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city;

–自收总量:
select a.clct_date rq,b.city sjj,d.city jdj,count(*) zszl from tb_evt_mail_clct a,sncn_zd_jg b,(select distinct city,xs_code from sncn_zd_jg) d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and b.zj_code=a.clct_bureau_org_code and d.xs_code=substr(a.rcv_area,1,4)
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city;

–妥投总量:
select a.clct_date rq,b.city sjj,d.city jdj,count(*) ttzl from tb_evt_mail_clct a,tb_jg b,tb_evt_dlv c,tb_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city;

–自投总量:
select a.clct_date rq,b.city sjj,d.city jdj,count(*) ztzl from tb_evt_mail_clct a,tb_jg b,tb_evt_dlv c,sncn_zd_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city;

–自收自投总量:
select a.clct_date rq,b.city sjj,d.city jdj,count(*) zszt from tb_evt_mail_clct a,sncn_zd_jg b,tb_evt_dlv c,sncn_zd_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city;

将每个查询结果看着是一个表,,使用join关键字将所有的查询连接起来,就可以一次显示所有查询结果,语句如下:

select aa.rq,aa.sjj,aa.jdj,aa.sjzl,bb.zszl,cc.ttzl,dd.ztzl,ee.zszt from
(select a.clct_date rq,b.city sjj,d.city jdj,count(*) sjzl from tb_evt_mail_clct a,tb_jg b,(select distinct city,xs_code from sncn_zd_jg) d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and b.zj_code=a.clct_bureau_org_code and d.xs_code=substr(a.rcv_area,1,4)
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city) aa
left join
(select a.clct_date rq,b.city sjj,d.city jdj,count(*) zszl from tb_evt_mail_clct a,sncn_zd_jg b,(select distinct city,xs_code from sncn_zd_jg) d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and b.zj_code=a.clct_bureau_org_code and d.xs_code=substr(a.rcv_area,1,4)
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city) bb
  on aa.rq=bb.rq and aa.sjj=bb.sjj and aa.jdj=bb.jdj
left join
(select a.clct_date rq,b.city sjj,d.city jdj,count(*) ttzl from tb_evt_mail_clct a,tb_jg b,tb_evt_dlv c,tb_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city) cc
  on aa.rq=cc.rq and aa.sjj=cc.sjj and aa.jdj=cc.jdj
left join
(select a.clct_date rq,b.city sjj,d.city jdj,count(*) ztzl from tb_evt_mail_clct a,tb_jg b,tb_evt_dlv c,sncn_zd_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city) dd
  on aa.rq=dd.rq and aa.sjj=dd.sjj and aa.jdj=dd.jdj
left join
(select a.clct_date rq,b.city sjj,d.city jdj,count(*) zszt from tb_evt_mail_clct a,sncn_zd_jg b,tb_evt_dlv c,sncn_zd_jg d
 where a.clct_date>=to_date(‘20111016′,’yyyymmdd’) and a.clct_date  and a.mail_num=c.mail_num and c.dlv_sts_code=’I’ and b.zj_code=a.clct_bureau_org_code and d.zj_code=c.dlv_bureau_org_code
  and b.city in ( ‘合肥市’,’芜湖市’ )and d.city in (‘安庆市’)
  group by a.clct_date,b.city,d.city order by a.clct_date,b.city,d.city) ee
  on aa.rq=ee.rq and aa.sjj=ee.sjj and aa.jdj=ee.jdj;

注意:连接条件是所有查询中结果相同的字段,即aa.rq=ee.rq and aa.sjj=ee.sjj and aa.jdj=ee.jdj;
 
附:JOIN语句语法:

JOIN用于根据两个或多个表中的列之间的关系,从这些表中查询数据。

JOIN: 如果表中有至少一个匹配,则返回行
LEFT JOIN: 即使右表中没有匹配,也从左表返回所有的行
RIGHT JOIN: 即使左表中没有匹配,也从右表返回所有的行
FULL JOIN: 只要其中一个表中存在匹配,就返回行

SQL INNER JOIN 关键字
在表中存在至少一个匹配时,INNER JOIN 关键字返回行。
INNER JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
INNER JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:INNER JOIN 与 JOIN 是相同的。

SQL LEFT JOIN 关键字
LEFT JOIN 关键字会从左表 (table_name1) 那里返回所有的行,即使在右表 (table_name2) 中没有匹配的行。

LEFT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
LEFT JOIN table_name2
ON table_name1.column_name=table_name2.column_name

SQL RIGHT JOIN 关键字
RIGHT JOIN 关键字会右表 (table_name2) 那里返回所有的行,即使在左表 (table_name1) 中没有匹配的行。

RIGHT JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
RIGHT JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, RIGHT JOIN 称为 RIGHT OUTER JOIN。

SQL FULL JOIN 关键字
只要其中某个表存在匹配,FULL JOIN 关键字就会返回行。

FULL JOIN 关键字语法
SELECT column_name(s)
FROM table_name1
FULL JOIN table_name2
ON table_name1.column_name=table_name2.column_name
注释:在某些数据库中, FULL JOIN 称为 FULL OUTER JOIN。

linux

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至253000106@qq.com举报,一经查实,本站将立刻删除。

发布者:PHP中文网,转转请注明出处:https://www.chuangxiangniao.com/p/1937449.html

(0)
上一篇 2025年2月22日 23:22:24
下一篇 2025年2月22日 23:22:36

AD推荐 黄金广告位招租... 更多推荐

相关推荐

  • 如何将 AWS Glue 爬网程序与 Amazon Athena 结合使用

    作为数据专业人员,您需要处理来自各种来源的大量数据。这可能会给数据管理和分析带来挑战。幸运的是,两项 AWS 服务可以提供帮助:AWS Glue 和 Amazon Athena。 当您集成这些服务时,您就释放了 AWS 生态系统中的数据发现…

    2025年2月23日
    100
  • Navicat实用功能:数据备份与结构同步

    摘要 当我们要对数据库做有风险的操作时需要对数据库备份,每次上线项目时,线上与线下数据库结构总会有不一致的情况,本文将讲解如何利用Navicat来方便的解决这两个问题。 Navicat Navicat是一套快速、可靠的数据库管理工具,专为简…

    2025年2月23日 数据库
    100
  • sql文件怎么导入navicat

    打开Navicat for MySQL后点击新建链接,会呈现很多未打开的数据库,在任意一个数据库上右键点击,选择“新建数据库”。 会出现一个弹窗,输入数据库的名字,随便写一个,字符集选择GBK,排序规则可以不用选。 相关推荐:《Navica…

    2025年2月23日 数据库
    100
  • navicat premium怎么上传数据库

    首先,在Navicat Premium中连接要导出数据库的mysql数据库。 填写好连接数据库的信息后就可以连接到需要导出的数据库了。 打开要导出的数据库。 将数据库的结构和数据导出为SQL文件。 相关推荐:《Navicat for mys…

    2025年2月23日 数据库
    100
  • navicat怎么打开数据库

    1、打开Navicat,点击左上角的‘Conection’按钮。 2、点击后,弹出菜单,我们要选择是哪种类型的数据库,根据你本地部署的数据库类型来选就行了,我这里选择MySql。 3、选择后,弹出窗口,在这个窗口上我们先输入数据库的Host…

    2025年2月23日 数据库
    100
  • navicat怎么清除数据库备份

    第一步,打开Navicat。 第二步,打开mysql数据库连接。 相关推荐:《Navicat for mysql使用图文教程》 第三步,点击备份所在的数据库,并选中备份菜单,此时显示已建的备份。 第四步,右击要删除的备份,在弹出菜单中选择“…

    2025年2月23日 数据库
    100
  • navicat怎么执行sql

    首先,使用Navicat for MySQL连接数据库并创建一个数据库。 接着点击查询,这里有两个查询,随便点击一个都可以。 既然是要执行SQL语句,所以我们要先新建一个查询窗体才得。 相关推荐:《Navicat for mysql使用图文…

    2025年2月23日 数据库
    100
  • navicat for mysql怎么导入sql

    Navicat for Mysql 是应用比较多的mysql的视图管理工具。下面为大家记录下Navicat for mysql如何导入sql文件。 推荐教程:MySQL入门视频教程 1、首先创建一个数据库(因为我导入的sql文件只有建表和插…

    2025年2月23日 数据库
    100
  • navicat怎么备份数据库

    本篇经验将和大家介绍如何利用Navicat for MySQL进行数据库备份的操作,希望对大家的工作和学习有所帮助! 推荐教程:mysql入门视频教程 1、打开桌面上的或者从开始程序中找到Navicat for MySQL,如下图所示: 2…

    2025年2月23日 数据库
    100
  • navicat新建数据库的步骤

    打开navicat工具,连接上您自己的mysql服务器,然后在如图所示的连接上右击,选择新建数据库。 相关推荐:《Navicat for mysql使用图文教程》 在新建数据库对话框中,需要输入数据库名称,选择字符集和排序规则,名称建议使用…

    2025年2月23日 数据库
    100

发表回复

登录后才能评论