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

相关文章
相关标签/搜索