vivion27 发表于 2018-10-10 11:34:32

mysql—查询优化

  1. count的使用
  SELECT
  count(*) countnall, #不忽略null,统计所有数据
  count(STATUS) countstatus, #指定列名,忽略列值为null的记录
  count(DISTINCT prizelevel) leveldiff #DISTINCT 参数:只包含不同的列值
  FROM
  bsy_prizeinfo;
  2. group by的使用
  group by 子句中列出的每个列都必须是检索列或有效的表达式(但不能是聚集函数)。
  ·如果在 SELECT 中使用表达式,则必须在GROUP BY 子句中指定相同的表达式。不能使用别名。
  ·除聚集计算语句外, 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在数据分组后进行过滤。
  1、where过滤条件;
  2、group by分组,每组按主键自增排序,取出未分组列为每组id最小的数据行;
  3、having过滤排序结果; WHERE 子句的条件(包括通配符条件和带多个操作符的子句)。所学过的有关 WHERE 的所有这些技术和选项都适用于HAVING 。它们的句法是相同的,只是关键字有差别。
  3.子查询

页: [1]
查看完整版本: mysql—查询优化