天天看點

我的部落格第一篇:mysql:sum()、count()函數分析

前言:今年剛畢業,在學校也不怎麼花時間去學習程式設計,反正就是懵懂的敲着代碼,懵懂的用着,感覺就是這樣用着就對了(ps:畢竟學校的課本也是這樣用的,自己可能也沒有細究,就這樣的用着用着)。

言歸正傳:

今天是我的第一篇部落格:寫的可能不好(應該是超級不好,哈哈,我就記着給自己看的)。

已知知識:

一 、declare變量的簡單應用

(mysql存儲過程中,定義變量有兩種方式:

1.使用set或select直接指派,變量名以 @ 開頭.

例如:set @var=1;

可以在一個會話的任何地方聲明,作用域是整個會話,稱為會話變量。

2.以 DECLARE 關鍵字聲明的變量,隻能在存儲過程中使用,稱為存儲過程變量,例如:

DECLARE var1  INT DEFAULT 0;  

主要用在存儲過程中,或者是給存儲傳參數中。

兩者的差別是:

在調用存儲過程時,以DECLARE聲明的變量都會被初始化為 NULL。而會話變量(即@開頭的變量)則不會被再初始化,在一個會話内,隻須初始化一次,之後在會話内都是對上一次計算的結果,就相當于在是這個會話内的全局變量。):

declare @n varchar(100)--定義變量

set @n =3--指派

select *  from  T_Bas_User  where [email protected];

declare @n varchar(100)--定義2個變量

declare @m varchar(100)

select @n =3,@m=9

select *  from  T_Bas_User  where id  between @n  and @m--查詢2個值之間的數

如已知以上知識可以看着篇文章:(https://www.cnblogs.com/CareySon/p/DifferenceBetweenCountStarAndCount1.html)

二、count(*)、count(1)、count(列名)差別

連結:https://blog.csdn.net/ifumi/article/details/77920767

從别人文章看完,結合我所已知的,得出結果:

count(1)與count(*)傳回的是所有的行數,忽略null,在資料庫中的  “ ” 與0 是不忽略,如下圖

我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析

個人認為,count()裡面的表達式是可以随便寫數字或者字元串的。(但是規範還是寫 * 或者 1)

count(列名)是從這列中計算不為  null 的個數, “” “” 和0 是會計數的。

我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析

三、sum(1)|、sum(2)、sum(列名)

之前很少用過sum(1)和sum(2)。不太懂,後來看了這篇文章才了解(https://blog.csdn.net/longshenlmj/article/details/44858481)

sum(1)可以與count(1)、count(*)計算表中的總條數。sum(n)這種代表 結果乘以 n  倍。count(n)不會。

統計count想過濾NULL的記錄:必須count(字段名):隻有指定字段,才能過濾掉該字段值為NULL的記錄.

sum()函數與其他函數的結合使用如:(連結:https://blog.csdn.net/qq_36850813/article/details/80449860)

if(expr1,expr2,expr3),當expr1為真則傳回expr2的值,否則expr3的值,結果就是if()的傳回值,

我的部落格第一篇:mysql:sum()、count()函數分析

sum(if(“”“你是豬”,1,0)) 如果你是豬則傳回1,即這個表達式 就為 sum(1)  你看是不是變成上面我說的的sum(1),可以求總條數。sum(0)結果為0;

我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析
我的部落格第一篇:mysql:sum()、count()函數分析

。。

當我們進行sum的時候,結果可能為null是以可以使用 ifnull()來進行判斷,ifnull(expr1,0)意思是當表單式為null,則傳回0.

count()函數傳回結果一般為非負數。不會傳回null.

SUM 是SQL語句中的标準求和函數,如果沒有符合條件的記錄,那麼SUM函數會傳回NULL。

來了個ifnull我能了解,居然還來了 nullif(額。。。。)随它去,暫時沒想到什麼情況用到它。

NULLIF 表達式

NULLIF(expr1,expr2):如果兩個參數相等則傳回NULL,否則傳回第一個參數的值expr1

在SQL語句中實作“if-then-else”邏輯計算功能

  有兩種形式:simple case和searched case

1)simple case的文法結構:

CASE  value

    WHEN  [compare_value] THEN  result

    [WHEN [compare_value] THEN  result ...] 

    [ELSE  result]  END

語義:

  将case後面的值value分别和每個when子句後面的值compare_value進行相等比較:

    如果一旦和某個when子句後面的值相等則傳回相應的then子句後面的值result;

    如果和所有when子句後面的值都不相等,則傳回else子句後面的值;

    如果沒有else部分則傳回null。

注意:

  ①value可以是字面量、表達式或者列名

  ②CASE表達式的資料類型取決于跟在then或else後面的表達式的類型

searched case:

case when sum(cnt) is null then 0 else sum(cnt) end