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