首页 > 数据库技术 > 详细

mysql—查询优化

时间:2017-02-23 14:22:58      阅读:329      评论:0      收藏:0      [点我收藏+]


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


mysql—查询优化

原文:http://wlan2014.blog.51cto.com/5553663/1900452

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!