mysql—查詢優化


1. count的使用mysql

SELECTsql

    count(*) countnall, #不忽略null,統計全部數據ide

    count(STATUS) countstatus, #指定列名,忽略列值爲null的記錄函數

    count(DISTINCT prizelevel) leveldiff #DISTINCT 參數:只包含不一樣的列值 spa

FROMcode

    bsy_prizeinfo;排序



2. group by的使用it

group by 子句中列出的每一個列都必須是檢索列有效的表達式(但不能是彙集函數)class

 ·若是在 SELECT 中使用表達式,則必須在GROUP BY 子句中指定相同的表達式。不能使用別名。select

 ·彙集計算語句外, SELECT 語句中的每一個列都必須在 GROUP BY 子句中給出

 若是分組列中具備 NULL 值,則 NULL 將做爲一個分組返回。若是列中有多行 NULL 值,它們將分爲一組。


SELECT

    id, #每組組中id最小數據行

    min(id), #每組中最小id

    prizecode, #未在group by的列,mysql能夠查詢不是分組的列

    prizelevel, #列值中有null,最爲一個分組返回

    count(*) AS levelcount, #統計全部的數據

    GROUP_CONCAT(prizecode,' , ') groupconcat #每一組中某個字段的集合

FROM

    bsy_prizeinfo

WHERE

    STATUS = '未領取' #where子句執行先於group by,從左到右執行過濾條件

GROUP BY

    prizelevel #默認按照分組列遞增排序

having count(*)>1 ; #過濾分組後的結果,只能和select中表達式相同,不能使用別名

注意:where在數據分組前進行過濾, having在數據分組後進行過濾。

一、where過濾條件;

二、group by分組,每組按主鍵自增排序,取出未分組列爲每組id最小的數據行;

三、having過濾排序結果; WHERE 子句的條件(包括通配符條件和帶多個操做符的子句)。所學過的有關 WHERE 的全部這些技術和選項都適用於HAVING 。它們的句法是相同的,只是關鍵字有差異。






3.子查詢

相關文章
相關標籤/搜索