日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...

發布時間:2025/3/21 数据库 40 豆豆
生活随笔 收集整理的這篇文章主要介紹了 db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等... 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
本系統為@牛旦教育IT課堂在微頭條上發布的內容,為便于查閱,特輯錄于此,都是常用SQL基本用法。

前兩篇連接:

(一):SQL點滴(查詢篇):數據庫基礎查詢案例實戰

(二):SQL點滴(排序篇):數據常規排序查詢實戰示例

(三):常用SQL系列之:記錄疊加、匹配、外連接及笛卡爾等

(四):常用SQL系列之:Null值、插入方式、默認值及復制等

(五):常用SQL系列之:多表和禁止插入、批量與特殊更新等

(六):常用SQL系列之:刪除方式、數據庫、表及索引元信息查詢等

(七):常用SQL系列之:表約束、最大/小值、非null數、平均值等

SQL點滴(46):如何通過SQL語句計算某個列值的累計和?


比如在員工信息表中有工資列,假設有3列,員工ABC三人,工資分別為400,600,900,那么希望通過sql語句,多出一列值,分別顯示的內容就是列值的累計,分別為400,1000,1900.如何實現呢?
參考語句可以類似這樣來寫(mySQL為例,PostgreSQL和SQL Server也適用):
SELECT
e.ename,
e.salary,
( SELECT sum( d.salary ) FROM employee d WHERE d.emid <= e.emid ) AS sumtotal
FROM
employee e
ORDER BY 3
----------------------------
若是在Oracle中實現此功能,語句會更簡單些(也適用DB2),參考示例如下:
select ename,salary,sum(salary) over (order by salary,emid) as sumtotal from employee order by 2.
通過SQL語句來實現這樣的功能,比單純的用程序讀取數據在處理是不是更爽啊。試試吧。

SQL點滴(47):如何計算計算指定列中某類值占總合的百分比?


比如,員工工資表中員工分屬不同部門,不如部門3有員工,工資分別為300,500,而員工工資列的總和(所有員工)為8000,這樣可以算出部門3的工資占總工資的10%,那如何通過SQL實現呢?
1)、這里以MySQL未來,實例如下所示:
SELECT
d3,total, ROUND( ( d3 / total ) * 100, 2 ) AS pct
FROM
( SELECT sum( CASE WHEN departid = 3 THEN salary END ) AS d3, sum( salary ) AS total FROM employee ) emp
這個也適用PostgreSQL數據庫。
2)、其它的數據庫比如OracleDB2和MSSQL,可以參照如下SQL實現:
select distinct(d3/total)*100 as pct
from (select departid,sum(salary) over () total,sum(salary) over(partition by departid) 10
from employee) x
where departid =3
OK,一則分享就這些了,試試吧。

SQL點滴(48):“去掉一個最高分,去掉一個最低分”,如何計算平均分?


看綜藝的節目的經常有專家組評分,常常是把最高和最低的排除,計算其余數的平均分這種情況。用數據庫的表述就是“計算不包含最大值和最小值其余列值總和平均值”,我們來看如何用SQL實現,比如計算剔除員工最高薪和最低薪來計算平均工資,參考SQL語句:
1)MySQL寫法——
SELECT
count( salary ),
avg( salary )
FROM
employee
WHERE
salary NOT IN ( ( SELECT min( salary ) FROM employee ), ( SELECT max( salary ) FROM employee ) )
這個寫法也是適用PostgreSQL的。注意count只是為確認計算了多少個列值。可省去。
這里需要注意的是:如果存在重復值(最大最小值),那么都會排除在平均值外。
2)Oracle寫法:
SELECT
avg( salary )
FROM (
select salary,min(salary) over() min_sal,max(salary) over() max_sal from employee
) x
WHERE
salary NOT IN (min_sal,max_sal )
這個寫法,同樣適合DB2和MS SQL。
問題,如果他們也有重復值,這種計算會怎樣?自己動手試試吧。

SQL點滴(49):如何用SQL實現年月日的加減運算?


經常在程序中要處理日期,若利用數據庫提供的日期處理功能,可以大大提高處理效率。那么數據庫中如何通過SQL來操作日期呢?參考如下:
1)MySQL的日期加減法(對當前日期的年月日的加減)運算SQL:
SELECT
now( ) AS curdate,
now( ) - INTERVAL 5 DAY AS cd_minus_5D,
now( ) + INTERVAL 5 DAY AS cd_plus_5D,
now( ) - INTERVAL 5 MONTH AS cm_minus_5M,
now( ) + INTERVAL 5 MONTH AS cm_plus_5M,
now( ) - INTERVAL 5 YEAR AS cy_minus_5Y,
now( ) + INTERVAL 5 YEAR AS cy_plus_5Y
注意這里利用interval、數字及年月日單位(year,month,day,大小寫無關),其中now代表當前日期時間,你可以用自己表中的日期值。當然,也可利用date_add函數來實現,形如這樣:
select date_add(now(),interval -5 day) as cd_minus_5D
2)Oralce的日期加減操作語句(員工雇用日期為操作數),類似如下:
select hiredate -5 as hd_minus_5D,hiredate + 5 as hd_plus_5D,
add_months(hiredate,5) as hd_minus_5M,
add_months(hiredate,5) as hd_plus_5M,
add_months(hiredate,-5*12) as hd_minus_5Y,
add_months(hiredate,5*12) as hd_plus_5Y
from employee
其它的數據庫就不舉例了,有興趣自己研究一下,再動手操練一下吧 ^_^ 。

SQL點滴(50):如何計算兩個日期間的天數?


也就是求兩個日期間相差的天數。例如計算兩個員工間雇用日期相差天數。下面我們來看看如何實現?
1)在MySQL中的寫法示例:
SELECT
datediff( ml_hd, zh_hd )
FROM
( SELECT hiredate AS ml_hd FROM employee WHERE ename = '馬力' ) x,
( SELECT hiredate AS zh_hd FROM employee WHERE ename = '鄭合' ) y
注意,datediff在MS SQL中同樣有效,只是得在函數的第一個參數為day,而其他的不便,只要把函數改成datediff(day, ml_hd, zh_hd ) 即可。注意這里針對一個表查詢,只能是子查詢。
2)在Oracle中的示例寫法:
select ml_hd - zh_hd
from
( SELECT hiredate AS ml_hd FROM employee WHERE ename = '馬力' ) x,
( SELECT hiredate AS zh_hd FROM employee WHERE ename = '鄭合' ) y
這個寫法也適用PostgreSQL。
3)BD2中寫法:
子查詢同上面的一樣,只是得用days函數,把第一個select后換成days(mz_hd)-days(zl_hd),即可。
好了,試試吧 ^_*

本篇就輯錄到這,點個贊,分享出去吧。

總結

以上是生活随笔為你收集整理的db2 日期加减一天_常用SQL系列之(八):列值累计、占比、平均值以及日期运算等...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。