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.子查詢