mysql 多条记录选择一套_2020-11-09-Mysql(练习题第一套)

遗留问题 select语句中的别名问题 group by 中的别名问题

# sql

-表 FACT_DAY_SC

-字段 DEPT_ID varchar(20) 电厂

TJSJ_DATE DATE 日期

FSL number 日发电量

create table FACT_DAY_SC(

DEPT_ID varchar(20),

TJSJ_DATE DATE,

FSL LONG

);

insert into FACT_DAY_SC values ('10001','2020-12-01',113);

insert into FACT_DAY_SC values ('10001','2019-02-01',1233);

insert into FACT_DAY_SC values ('10001','2020-03-01',1453);

insert into FACT_DAY_SC values ('10002','2020-04-01',113);

insert into FACT_DAY_SC values ('10001','2020-05-01',563);

insert into FACT_DAY_SC values ('10002','2020-06-01',4);

insert into FACT_DAY_SC values ('10001','2020-07-01',567);

insert into FACT_DAY_SC values ('10002','2020-08-01',4567);

insert into FACT_DAY_SC values ('10001','2020-09-01',1232);

insert into FACT_DAY_SC values ('10001','2020-10-01',456);

insert into FACT_DAY_SC values ('10001','2020-07-23',678);

insert into FACT_DAY_SC values ('10003','2020-09-2',1247);

insert into FACT_DAY_SC values ('10001','2020-01-2',579);

insert into FACT_DAY_SC values ('10003','2019-01-3',1257);

insert into FACT_DAY_SC values ('10001','2019-01-11',1269);

insert into FACT_DAY_SC values ('10003','2020-01-4',4793);

insert into FACT_DAY_SC values ('10003','2019-01-5',47234);

insert into FACT_DAY_SC values ('10003','2020-04-04',4793);

insert into FACT_DAY_SC values ('10003','2018-01-19',4456783);

insert into FACT_DAY_SC values ('10003','2020-12-01',47123);

1.写出SQL计算出每个单位,每个月的最高发电量

//问题:分析是否按照年来分类

// select substr(cast('2020-01-09' as Date ) , 1,7 ); substr() 函数能截取日期

//substr(string string, int a, int b);函数的理解

//string 需要截取的字符串

a 截取字符串的开始位置(注:当a等于0或1时,都是从第一位开始截取)

b 要截取的字符串的长度

select

DEPT_ID,

substr(DEPT_ID,,6,2) as result ,

max(FSL)

from FACT_DAY_SC

group by DEPT_ID , substr(TJSJ_DATE,6,2) ;

2.求取10001电厂,每日的最高发电量(显示到目前为只每日最高发电量)

//用聚合函数还是使用窗口函数

//好像不行???? 发现问题??? 我用的是long比较的是字典顺序?????

select

*,

max(FSL) over(ORDER BY TJSJ_DATE) as num

from

FACT_DAY_SC

where DEPT_ID ='10001';

//这个是比较的是前后日期最大的日电量

select

DEPT_ID,

TJSJ_DATE,

if(result > FSL , result , FSL) as '日最大用量'

from

(

select

DEPT_ID,

TJSJ_DATE,

FSL,

lead(FSL,1) over( order by FSL ) as result

from

(

select

DEPT_ID,

TJSJ_DATE,

FSL

from FACT_DAY_SC

where DEPT_ID = '10001'

order by TJSJ_DATE

) t1

) t2

3.基于2查询每次打破日最大用电量的日期和发电量

select

TJSJ_DATE,

FSL

from

(

select

DEPT_ID,

TJSJ_DATE,

FSL,

max(FSL) over(order by FSL ) as max_result

from

FACT_DAY_SC

where DEPT_ID = '10001'

) t1

where max_result = t1.FSL

4.查询日期2019-01-11日发电量topN 的电厂

//知识点 序列函数考虑并序

select

DEPT_ID

dense_rank() over(order by FSL )

from FACT_DAY_SC

where TJSJ_DATE = '2019-01-11'

5.计算本年有多少天的SQL?

//知识点回顾SQL中的日期函数 注意使用 cast(' 2020-09-09' as DATE)

datediff(date ,date)+1 比较两个日期之间相差多少天

date_add(date,number) 日期加number

date_sub(date ,number) 日期减number

select datediff('2020-12-31','2020-01-01') +1

6.计算 2019-01月 及 电厂10001 中天数超过平均发电量的天数

//知识点 使用切割函数 substr() 分组

//发现不允许这样用使用子查询

select

count(FSL > avg(FSL))

from

FACT_DAY_SC

where DEPT_ID = '1001' and substr(TJSJ_DATE ,1,7) = '2020-09'

// substr和子查询

select

count(FSL >(select

avg(FSL)

from

FACT_DAY_SC

where DEPT_ID = '10001'

group by DEPT_ID) )

from

FACT_DAY_SC

where DEPT_ID = '10001' and substr(TJSJ_DATE ,1,7) = '2020-09'

b4321f52f5ce

image.png

8.指标分析

create table TEST(

DEP_CODE varchar(10),

ITEM_CODE varchar(10),

ITEM_VALUE int

);

insert into TEST values ('单位一','A',100);

insert into TEST values ('单位二','A',200);

insert into TEST values ('单位一','B',300);

insert into TEST values ('单位二','B',300);

insert into TEST values ('单位一','C',350);

insert into TEST values ('单位二','C',300);

select

DEP_CODE,

ITEM_CODE,

ITEM_VALUE

from

TEST

UNION ALL

select

DEP_CODE,

'D' as ITEM_CODE,

sum(if(ITEM_CODE = 'C',-ITEM_VALUE,ITEM_VALUE)) as ITEM_VALUE

from

TEST

group by DEP_CODE

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值