注册
达梦8数据库的常用的嵌套查询总结
培训园地/ 文章详情 /

达梦8数据库的常用的嵌套查询总结

大米 2023/05/19 1896 4 0

前言
最近学校安排了实践课,内容是学习达梦数据库的安装,以及常用的查询方法。下面我就列出一些常用的嵌套查询题型。

一、查询统计二级类型最多的一级类型数据
分析:分成两部来做,先按照parentid进行分组统计每个一级类型下子类型的个数,然后再对前一步的查询结果进行筛选,得到子类型最多的哪一个类级
1.按照parentid进行分组统计每个一级类型下子类型的个数

select parent_id,count(category_id)num from
vspace .i_category where parent_id != 0 group by parent_id;
1
2
2.对前一步的查询结果进行筛选,得到子类型最多的哪一个类级
select parent_id,count(category_id)num from
vspace .i_category where parent_id != 0 group by
parent_id order by count(category_id) desc limit 0,1;
1
2
3
查询结果:

a.如果遇到并列第一,就用下面的方法

select max(t.num) from(
select parent_id,count(category_id)num from
vspace .i_category where parent_id != 0 group by
parent_id
);
1
2
3
4
5
b.如果希望的到二号类型的详细数据,再进行一次子查询

select * from vspace.i_category where category_id = (
select parent_id from
vspace .i_category where parent_id != 0 group by
parent_id order by count(category_id) desc limit 0,1
);
1
2
3
4
5
二、同步更新功能的实现
1.同步更新:

update vspace.i_order o set sum_price=(
select price from vspace.i_goods where goods_id = o.goods_id
)*ammount;
1
2
3
2.如果数据量比较大则可以:

update vspace.i_order o set sum_price=(
select price from vspace.i_goods where goods_id = o.goods_id
)*ammount where order_id in(
--使用分页查询,查询每一批次的订单编号
select order_id from(
select rownum num,*from(
select * from vspace.i_order
)t2 where rownum <= 200000
)t1 where t1.num>=100000
);
commit;//一定要提交
1
2
3
4
5
6
7
8
9
10
11
三、查询统计每年销量最好的商品
分析:先统计每年每种商品的销售数量(按照年份和商品编号分组统计),然后将上一步得到的结果看做虚拟表,再次按照年份进行分组统计每年的最大销量,最后将第一步的结果看做虚拟表a,第二步结果看做虚拟表b,然后对a,b两表做内联接查询
(1)统计每年每种商品的销售数量

select year(order_date),goods_id,sum(ammount) total
from vspace.i_order group by year(order_date),goods_id
1
2
(2)将上一步得到的结果看做虚拟表,再次按照年份进行分组统计每年的最大销量

select y,max(total) max_total from (
select year(order_date) y,goods_id,sum(ammount) total
from vspace.i_order group by year(order_date),goods_id
) t group by y;
1
2
3
4
(3)第一步的结果看做虚拟表a,第二步结果看做虚拟表b,然后对a,b两表做内联接查询

select a.* from (
select year(order_date) y,goods_id,sum(ammount) total
from vspace.i_order group by year(order_date),goods_id
)a,(
select y,max(total) max_total from (
select year(order_date) y,goods_id,sum(ammount) total
from vspace.i_order group by year(order_date),goods_id
) t group by y
)b where a.y=b.y and a.total=b.max_total;
1
2
3
4
5
6
7
8
9
查询结果:
1.png

四、查询统计在去年的基础上今年每个季度的销售总额增长情况(同比数据分析)
分析:先查询统计出去年每个季度的销售总额,再查询统计出今年每个季度的销售总额,最后第一步的结果看做虚拟表a,第二步的结果看做虚拟表b,进行联接查询并计算增量
1.查询统计出去年每个季度的销售总额

select datepart(QQ,order_date),sum(sum_price) total
from vspace.i_order where year(order_date)=year(now())-2
//因为现在是2021年,数据库里面的数据只到2020年,所以要用now-2
group by datepart(QQ,order_date)
1
2
3
4
2.查询统计出今年每个季度的销售总额

select datepart(QQ,order_date),sum(sum_price) total
from vspace.i_order where year(order_date)=year(now()-1)
//因为现在是2021年,数据库里面的数据只到2020年,所以要用now-1
group by datepart(QQ,order_date)
1
2
3
4
3.将第一步的结果看做虚拟表a,第二步的结果看做虚拟表b,进行联接查询并计算增量

select a.q 季度, concat(round((b.total-a.total)*100/a.total,3),'%') 增长量
from (
select datepart(QQ,order_date) q,sum(sum_price) total
from vspace.i_order where year(order_date)=year(now())-2
group by datepart(QQ,order_date)
)a,(
select datepart(QQ,order_date) q,sum(sum_price) total
from vspace.i_order where year(order_date)=year(now())-1
group by datepart(QQ,order_date)
)b where a.q=b.q;
1
2
3
4
5
6
7
8
9
10
查询结果:
2.png

总结
这里我就举一些经典题目,后面可能还会更新。在看到需求时,不要慌张,一步一步分析,将大问题拆分成各种小问题。比如最后一题的求季度同比增长率,要先知道同比增长率就是去年季度销量比上今年季度销量。下面就是先求出去年各个季度的销量,然后求出今年的各个季度销量,最后求出各个季度销量同比增长率。问题迎刃而解。总结成一句话就是逐步分析。不要想这一步就能把问题解决了,一口吃成胖子是不可能的,还是一步一步来比较实际。

评论
后发表回复

作者

文章

阅读量

获赞

扫一扫
联系客服