sql中詳解round(),floor(),ceiling()函式的用法和區別?
round() 遵循四捨五入把原值轉化為指定小數位數,
如:round(1.45,0) = 1;round(1.55,0)=2
floor()向下舍入為指定小數位數 如:floor(1.45,0)= 1;floor(1.55,0) = 1
ceiling()向上舍入為指定小數位數 如:ceiling(1.45,0) = 2;ceiling(1.55,0)=2
SQL中ISNULL用法示例
ISNULLSQL查詢示例SELECT ISNULL 使用指定的替換值替換 NULL。 語法 ISNULL ( check_expression , replacement_value ) 引數 check_expression 將被檢查是否為 NULL的表示式。check_expression 可以是任何型別的。 replacement_value 在 check_expression 為 NULL時將返回的表示式。replacement_value 必須與 check_expresssion 具有相同的型別。 返回型別 返回與 check_expression 相同的型別。 註釋 如果 check_expression 不為 NULL,那麼返回該表示式的值;否則返回 replacement_value。 示例 1 示例資料 表tb_Student及其示例資料如下圖所示。2 查詢要求 查詢出其中成績(score)小於等於60的學生資訊儲存至表變數@tempTable中,當學生成績為空時,成績記為0。 ?
1 2 3 4 5 6 7 8 9 |
[csharp]
declare
@tempTable table (
stuname
nchar (10),
stuage
int ,
stuscore
float );
insert
into
@tempTable
select
name ,age, ISNULL (score,0)
from
tb_Student
where
ISNULL (score,0)<=60
select
* from
@tempTable
|
sql 中isnull函式的用法:
declare @t table
( id int identity(1,1),
UserId varchar(10),
Odds int)
insert @t select 'a',12
union all select 'b',23
union all select 'c',34
select isnull(userid,'total') as userid,
sum(odds) as odds from @t
group by userid
with rollup
/**userid odds--------------
a 12
b 23
c 34
total 69**/
1. ISNULL使用指定的替換值替換 NULL。
語法ISNULL ( check_expression , replacement_value )
註釋
如果 check_expression 不為 NULL,那麼返回該表示式的值;否則返回 replacement_value。2. ROLLUP ( )生成簡單的 GROUP BY 聚合行以及小計行或超聚合行,還生成一個總計行。
返回的分組數等於 <composite element list> 中的表示式數加一。
例如,請考慮下面的語句。
SELECT a, b, c, SUM ( <expression> )FROM T
GROUP BY ROLLUP (a,b,c)
會為 (a, b, c)、(a, b) 和 (a) 值的每個唯一組合生成一個帶有小計的行。
還將計算一個總計行。
列是按照從右到左的順序彙總的。
列的順序會影響 ROLLUP 的輸出分組,而且可能會影響結果集內的行數。
為什麼要引入ROLLUP?可方便的生成"合計"、"小計"、"總計" 等混合統計的報表
如下資料集A經過ROLLUP運算可生成資料集B
1.ROLLUP簡單應用
SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP
查詢結果如下:
如果用ROLLUP的另一個關鍵字CUBE產生的結果如下: SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH CUBE 引出一個概念:
維:查詢所指定的列稱為維,列的個數稱為維度
以上兩個SQL語句涉及三個維度,ROLLUP和CUBE都可以用於多維計算,不同點在於CUBE可以包含所有緯度的組合,而
ROLLUP只涉及指定列的維度計算。 2.ROLLUP運算關鍵字GROUPING
GROUPING:判斷是否為多維計算中的附加列,如果是則輸出1,否則輸出0 SELECT Groups= CASE WHEN GROUPING(GROUPS)=1 THEN 1 ELSE 0 END ,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP 結果: 排序應用: SELECT Groups,Item,Color FROM @t GROUP BY Groups,Item,Color WITH ROLLUP ORDER BY GROUPING(Groups),Groups DESC 結果:
SELECT * FROM @t ORDER BY groups DESC
結果:
至於自定義附加列的樣式在第三步講解 3.ROLLUP綜合運用 SELECT Groups=CASE
WHEN GROUPING(Color)=0 THEN Groups
WHEN GROUPING(Groups)=1 THEN '總計'
ELSE '' END,
Item=CASE
WHEN GROUPING(Color)=0 THEN Item
WHEN GROUPING(Item)=1 THEN Groups+' 合計'
ELSE '' END,
Color=CASE
WHEN GROUPING(Color)=0 THEN Color
WHEN GROUPING(Color)=1 THEN Item+' 小計'
ELSE '' END,
Quantity=SUM(Quantity)
FROM @t
GROUP BY Groups,Item,Color WITH ROLLUP
ORDER BY GROUPING(Groups),
CASE WHEN GROUPING(Groups)=0 THEN Groups END DESC,
GROUPING(Item),
CASE WHEN GROUPING(Item)=0 THEN Item END DESC,
GROUPING(Color),
CASE WHEN GROUPING(Color)=0 THEN Color END DESC 結果:
Cube 和 RollUp 的區別 The differences between CUBE and ROLLUP are:
-
CUBE generates a result set that shows aggregates for all combinations of values in the selected columns.
-
-
可以看到Cube 比 RollUp多了三行.一比較發現,多的三行都是以Color列為緯度統計的。再結合書上說的那點區別,說RollUp是按層統計的。
猜想區別就是Cube對每個緯度都統計了,而RollUp對Group by 後跟的第一個緯度按照值不同順序統計完後,終止在Null,NUll,1117這一行,不再繼續。
我又加了一列Dept,調整之後再次比較結果,證實了我的猜想,RollUp以Item作為基本緯度,統計完所有情況後,就終止在Null,Null,NUll,1117這一行了。下面附上sql語句:
CREATE TABLE Inventory (
Item varchar(53) NOT NULL,
Color varchar(53) NULL,
Department varchar(53) Null,
Quantity int NULL
);INSERT Inventory VALUES ('Table', 'Red','IT', 223);
INSERT Inventory VALUES ('Table', 'White','HR', 54);
INSERT Inventory VALUES ('Table', 'Blue','ADM', 124);
INSERT Inventory VALUES ('Chair', 'Red', 'IT',210);
INSERT Inventory VALUES ('Chair', 'Blue','HR', 101);
INSERT Inventory VALUES ('Chair', 'White','ADM', 23);
INSERT Inventory VALUES ('Stand', 'Red','IT', 213);
INSERT Inventory VALUES ('Stand', 'Blue','HR', 141);
INSERT Inventory VALUES ('Stand', 'White','ADM', 28);SELECT * FROM Inventory
SELECT Item, Color, Department,SUM(Quantity) AS Quantity
FROM Inventory
GROUP BY Item, Color,Department WITH CUBE;SELECT Item, Color, Department,SUM(Quantity) AS Quantity
FROM Inventory
GROUP BY Item, Color,Department WITH Rollup