db2 日期加减一天_常用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只是為確認計算了多少個列值??墒∪ァ?br />這里需要注意的是:如果存在重復值(最大最小值),那么都會排除在平均值外。
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系列之(八):列值累计、占比、平均值以及日期运算等...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 甘特图 知乎_安利!拥有这5款甘特图工具
- 下一篇: python获取url文件名_pytho