乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      SQL用了兩年多,我最常用的2個小技巧

       F2967527 2021-06-18

      導讀

      SQL是所有數(shù)據(jù)從業(yè)者必須打牢的基本功之一,扎實的SQL查詢和適當?shù)恼{優(yōu)技巧是檢驗SQL能力的兩大重要準則。個人曾經(jīng)專門花費過好多時間用于提升SQL能力,期間也刷了大量的SQL題目,在這期間也不斷摸索總結了一些小技巧,今天本文就來分享其中的兩個,也差不多是日常使用中最為高頻的兩個了。

      圖片

      5分鐘學會的兩個小技巧

      為了配合演示這兩個小技巧,本文所使用示例數(shù)據(jù)如下,其實這也是前幾天推文中所使用的數(shù)據(jù):

      圖片

      示例學生成績表

      01 SQL的數(shù)據(jù)類型隱式轉換
      很多編程語言都限定了數(shù)據(jù)類型,例如在Python中字符串'0'和數(shù)值0是不相等的,布爾型True和數(shù)值1也是不相等,但在SQL中則不然,其內置了數(shù)據(jù)類型隱式轉換功能,所以執(zhí)行查詢 select '0'=0 會返回1的,這既說明字符串'0'和數(shù)值0是相等的,也說明SQL中的布爾值會自動轉換為1或0。

      圖片

      利用這一小技巧,在實現(xiàn)很多統(tǒng)計指標時就可以有很多小技巧。例如計算學生成績表中每名學生的成績的優(yōu)秀率,即成績在90分以上的科目與本人總科目的占比。為實現(xiàn)這一查詢,常規(guī)的操作是分別統(tǒng)計每名學生成績在90分以上的科目數(shù)量和總科目,然后進行相除得到占比。

      實際上,在給出前述小例子的基礎上,這一需求可以如下實現(xiàn):

      圖片

      其中,在每名學生的分組中,條件判斷score>=90返回一組0或1的結果,對這組0/1取值進行求均值操作,即等價于求成績>=90的科目占比。

      02 巧妙運用if函數(shù)和null

      SQL內置了眾多函數(shù),但對于一名程序員而言if函數(shù)應該尤為常見和常用;另一方面,null值也是SQL中一個神奇的存在,它有兩大特性:一是任何值與null的任何計算都會得到null值;二是在任何聚合函數(shù)中,null值都不參與計算(例如,count計數(shù)就是查找null以外的結果數(shù)量)。配合使用if函數(shù)和null值,有時也可實現(xiàn)很好的效果。

      例如,仍然針對以上學生成績表,需要分別統(tǒng)計每名學生成績在80分以上成績的平均值,也就是如果成績>=80則參與最后均值計算,否則不參與。配合if函數(shù)和null的特性,可以如下優(yōu)雅的實現(xiàn):

      圖片

      實際上,上述查詢語句中,首先通過if函數(shù)衍生一個臨時字段if(score>=80, score, null)其取值為:成績≥80時取成績值,否則置為null,即相當于僅保留了成績在80分以上的記錄;而后嵌套一層avg函數(shù)即直接實現(xiàn)了計算80分以上平均值的效果。

      當然,對于這一需求也可以先用where條件過濾出成績在80分以上的記錄后再聚合統(tǒng)計。
      圖片

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多