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'
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
總結
以上是生活随笔為你收集整理的mysql 多条记录选择一套_2020-11-09-Mysql(练习题第一套)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 男生1年去图书馆732次被校长致辞 称努
- 下一篇: avgcc.exe是什么进程 avgcc