中文字幕日韩精品一区二区免费_精品一区二区三区国产精品无卡在_国精品无码专区一区二区三区_国产αv三级中文在线

SQL難點(diǎn)解決:集合及行號(hào)

SQL 雖然有集合概念,但對(duì)于集合運(yùn)算、特別是有序集合運(yùn)算,提供的支持卻很有限,經(jīng)常要采用很費(fèi)解的思路才能完成,計(jì)算效率也不佳。而集算器 SPL 在方面則要直觀許多,可以按自然思維習(xí)慣寫出運(yùn)算。這里對(duì) SQL 和集算器 SPL 在集合運(yùn)算和行號(hào)相關(guān)運(yùn)算方面進(jìn)行了對(duì)比。

在金東等地區(qū),都構(gòu)建了全面的區(qū)域性戰(zhàn)略布局,加強(qiáng)發(fā)展的系統(tǒng)性、市場(chǎng)前瞻性、產(chǎn)品創(chuàng)新能力,以專注、極致的服務(wù)理念,為客戶提供網(wǎng)站制作、成都網(wǎng)站建設(shè) 網(wǎng)站設(shè)計(jì)制作按需網(wǎng)站制作,公司網(wǎng)站建設(shè),企業(yè)網(wǎng)站建設(shè),成都品牌網(wǎng)站建設(shè),全網(wǎng)整合營(yíng)銷推廣,成都外貿(mào)網(wǎng)站建設(shè)公司,金東網(wǎng)站建設(shè)費(fèi)用合理。

1、  和集

示例 1:重疊部分不重復(fù)計(jì)數(shù)時(shí)求多個(gè)時(shí)間段包含的總天數(shù)

MySQL8:

with recursive t(start,end) as (select date'2010-01-07',date'2010-01-9'

union all select date'2010-01-15',date'2010-01-16'

union all select date'2010-01-07',date'2010-01-12'

union all select date'2010-01-08',date'2010-01-11'),

t1(d,end) as (select start,end from t

union all select d+1,end from t1 where d

select count(distinct d) from t1;

說(shuō)明:此例先將各時(shí)間段轉(zhuǎn)成時(shí)間段內(nèi)所有日子對(duì)應(yīng)的日期,然后再求不同日期的個(gè)數(shù)

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 對(duì) A2 中的每一個(gè)時(shí)間段構(gòu)造從 start 到 end 的日期序列

A4: 求 A3 中所有日期序列的和

A5: 求 A4 中不重復(fù)日期的個(gè)數(shù)

SQL 難點(diǎn)解決:集合及行號(hào)

 

2、  差集

示例 1:列出英語(yǔ)人口和法語(yǔ)人口均超過(guò) 5% 的國(guó)家

MySQL8:

with t1(lang) as (select 'English' union all select 'French')

select name from world.country c

where not exists(select * from t1 where lang not in (select language from world.countrylanguage where percentage>=5 and countrycode=c.code));

說(shuō)明:此SQL只是演示通過(guò)雙重否定實(shí)現(xiàn)差集為空

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A4: 選出[“English”,”French”]與本組語(yǔ)言集合的差為空的組,意思就是選出語(yǔ)言集合包含English和French的組

SQL 難點(diǎn)解決:集合及行號(hào)

 

3、  交集

示例 1:列出英語(yǔ)人口、法語(yǔ)人口、西班牙語(yǔ)人口分別超過(guò) 0.3%、0.2%、0.1% 的國(guó)家代碼

MySQL8:

with t1 as (select countrycode from world.countrylanguage where language='English' and percentage>0.3),

t2 as (select countrycode from world.countrylanguage where language='French' and percentage>0.2),

t3 as (select countrycode from world.countrylanguage where language='Spanish' and percentage>0.1)

select countrycode

from t1 join t2 using(countrycode) join t3 using(countrycode);

說(shuō)明:此例只是演示如何求解多個(gè)集合的交集

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 按次序依次查詢英語(yǔ)人口超0.3%、法語(yǔ)人口超0.2%、西班牙語(yǔ)超0.1%的國(guó)家代碼,并轉(zhuǎn)成序列

A5: A3中所有序列交集

SQL 難點(diǎn)解決:集合及行號(hào)

 

4、  根據(jù)行號(hào)取數(shù)據(jù)

示例 1:計(jì)算招商銀行 (600036) 2017 年第 3 個(gè)交易日和倒數(shù)第 3 個(gè)交易日的交易信息

MySQL8:

with t as (select *, row_number() over(order by tdate) rn from stktrade where sid='600036' and tdate between '2017-01-01' and '2017-12-31')

select tdate,open,close,volume from t where rn=3

union all

select tdate,open,close,volume from t where rn=(select max(rn)-2 from t);

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 第 3 條記錄和倒數(shù)第 3 條記錄的和集

SQL 難點(diǎn)解決:集合及行號(hào)

 

示例2:計(jì)算招商銀行(600036)最近20個(gè)交易日的平均收盤價(jià)

MySQL8:

with t as (select *, row_number() over(order by tdate desc) rn from stktrade where sid='600036')

select avg(close) avg20 from t where rn<=20;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A2: 將600036的交易記錄按日期排序

A3: 取從倒數(shù)20條到末尾的所有記錄

A4: 求A3中所有記錄收盤價(jià)的平均值

SQL 難點(diǎn)解決:集合及行號(hào)

 

5、  求滿足條件的記錄的行號(hào)

示例 1:計(jì)算招商銀行 (600036)2017 年經(jīng)過(guò)多少交易日收盤價(jià)達(dá)到 25 元

MySQL8:

with t as (select *, row_number() over(order by tdate) rn from stktrade where sid='600036' and tdate between '2017-01-01' and '2017-12-31')

select min(rn) from t where close>=25;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 從前往后查找第 1 個(gè)收盤價(jià)達(dá)到 25 元的記錄位置

SQL 難點(diǎn)解決:集合及行號(hào)

 

示例2:計(jì)算格力電器(000651) 2017年漲幅(考慮停牌)

MySQL8:

with t as (select * from stktrade where sid='000651'),

t1(d) as (select max(tdate) from t where tdate<'2017-01-01'),

t2(d) as (select max(tdate) from t where tdate<'2018-01-01')

select s2.close/s1.close-1 rise

from (select * from t,t1 where tdate=d) s1,

(select * from t,t2 where tdate=d) s2;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A2: 數(shù)據(jù)按交易日從小到大排序

A3: 從后往前查找交易日在2017-01-01之前的最后一條記錄在序列中的行號(hào)

A4: 求2016年收盤價(jià)

A5: 求2017年收盤價(jià),其中A2.m(-1)取倒數(shù)第1條記錄,即2017年最后一個(gè)交易日對(duì)應(yīng)的記錄

SQL 難點(diǎn)解決:集合及行號(hào)

 

示例3:列出2017年信息發(fā)展(300469)交易量超過(guò)250萬(wàn)股時(shí)的交易信息及各日漲幅(考慮停牌)

MySQL8:

with t as (select *, row_number() over(order by tdate) rn

from stktrade where sid='300469' and tdate<=date '2017-12-31'),

t1 as (select * from t where tdate>=date'2017-01-01' and volume>=2500000)

select t1.tdate, t1.close, t.volume, t1.close/t.close-1 rise

from t1 join t on t1.rn=t.rn+1;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 求出2017年交易量超250萬(wàn)股所有記錄的行號(hào)

A4: 根據(jù)行號(hào)計(jì)算相應(yīng)的日期、收盤價(jià)、交易量、漲幅

SQL 難點(diǎn)解決:集合及行號(hào)

 

6、  求最大值或最小值所在記錄的行號(hào)

示例 1:計(jì)算招商銀行 (600036) 2017 年最早的最低價(jià)與最早的最高價(jià)間隔多少交易日

MySQL8:

with t as (select *, row_number() over(order by tdate) rn from stktrade where sid='600036' and tdate between '2017-01-01' and '2017-12-31'),

t1 as (select * from t where close=(select min(close) from t)),

t2 as (select * from t where close=(select max(close) from t))

select abs(cast(min(t1.rn) as signed)-cast(min(t2.rn) as signed)) inteval

from t1,t2;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 從前往后找最大收盤價(jià)在序列中的行號(hào)

A4: 從前往后找最小收盤價(jià)在序列中的行號(hào)

SQL 難點(diǎn)解決:集合及行號(hào)

 

示例2:計(jì)算招商銀行 (600036) 2017 年最后的最低價(jià)與最后的最高價(jià)間隔多少交易日

MySQL8:

with t as (select *, row_number() over(order by tdate) rn from stktrade where sid='600036' and tdate between '2017-01-01' and '2017-12-31'),

t1 as (select * from t where close=(select min(close) from t)),

t2 as (select * from t where close=(select max(close) from t))

select abs(cast(max(t1.rn) as signed)-cast(max(t2.rn) as signed)) inteval

from t1,t2;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A3: 從后往前找最大收盤價(jià)在序列中的行號(hào)

A4: 從后往前找最小收盤價(jià)在序列中的行號(hào)

SQL 難點(diǎn)解決:集合及行號(hào)

 

7、  有序集合間的對(duì)位計(jì)算

示例 1:求 2018 年 3 月 6 日到 8 日創(chuàng)業(yè)板指 (399006) 對(duì)深證成指 (399001) 的每日相對(duì)收益率

MySQL8:

with t1 as (select *,close/lag(close) over(order by tdate) rise from stktrade where sid='399006' and tdate between '2018-03-05' and '2018-03-08'),

t2 as (select *, close/lag(close) over(order by tdate) rise from stktrade where sid='399001' and tdate between '2018-03-05' and '2018-03-08')

select t1.rise-t2.rise

from t1 join t2 using(tdate)

where t1.rise is not null;

 

集算器SPL:

SQL 難點(diǎn)解決:集合及行號(hào)  

A2: 依次查詢399006和399001從2018年3月5日到8日的交易數(shù)據(jù)

A4: 依次計(jì)算A2中2個(gè)序表從第2條記錄到第4條記錄的漲幅,也就是399006和399001從2018年3月6日到8日的每天漲幅

A5: 對(duì)位相減,即可算出每日相對(duì)收益率

SQL 難點(diǎn)解決:集合及行號(hào)

當(dāng)前名稱:SQL難點(diǎn)解決:集合及行號(hào)
分享地址:http://www.rwnh.cn/article16/jipddg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動(dòng)態(tài)網(wǎng)站自適應(yīng)網(wǎng)站、商城網(wǎng)站移動(dòng)網(wǎng)站建設(shè)、云服務(wù)器網(wǎng)站內(nèi)鏈

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名
舞阳县| 砀山县| 化隆| 高邮市| 芒康县| 鄱阳县| 宣化县| 新邵县| 乌兰察布市| 商南县| 黑龙江省| 宜昌市| 新疆| 神池县| 安国市| 松溪县| 宜川县| 胶南市| 安龙县| 青浦区| 措美县| 赤壁市| 微山县| 阿勒泰市| 永定县| 巧家县| 定远县| 五峰| 汾西县| 南木林县| 正宁县| 金平| 梧州市| 奇台县| 五寨县| 惠东县| 涿州市| 垦利县| 开封市| 克拉玛依市| 永春县|