• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >Mysql > mysql数据分组:过滤分组

mysql数据分组:过滤分组

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2018-12-05

匿名通过本文主要向大家介绍了数据分组,过滤分组等相关知识,希望本文的分享对您有所帮助
mysql过滤分组

除了能用group by分组数据外,MySQL还允许过滤分组,规定包括哪些分组,排除哪些分组。例如,可能想要列出至少有两个订单的所有顾客。为得出这种数据,必须基于完整的分组而不是个别的进行过滤。

我们已经看到了where子句的作用。但是,在这个例子中where不能完成任务,因为where过滤指定的是行而不是分组。事实上,where没有分组概念。

那么,不使用where使用什么呢?MySQL为此目的提供了另外的子句,那就是having子句。having非常类似于where。事实上,目前为止所学过的所有类型的where子句都可以用having来替代。唯一的差别是where过滤行,而having过滤分组。

注意:having支持所有的where操作符。

那么,怎么过滤分组呢?请看下面的例子:

输入:

select cust_id,count(*) as orders from orders group by cust_id having count(*) >= 2;

输出:

QQ截图20170509101253.png

分析:这条select语句的前3行类似于上面的语句。最后一行增加了having子句,它过滤count(*>)>=2(两个以上的订单)的那些分组。

正如所见,这里where子句不起作用,因为过滤是基于分组聚集值而不是特定行值的。

having和where的差别:这里有另一种理解方法,where在数据分组前进行过滤,having在数据分组后进行过滤。这是一个重要的区别,where排除的行不包括在分组中。这可能会改变计算值,从而影响having子句中基于这些值过滤掉的分组。

那么,有没有在一条语句中同时使用where和having子句的需要呢?事实上,确实有。假如想进一步过滤上面的语句,使它返回过去12个月内具有两个以上的顾客。为达到这一点,可增加一条where子句,过滤出去12个月内下过的订单。然后再增加having子句过滤出具有两个以上订单的分组。

为更好的理解,请看下面的例子,它列出具有2个(含)以上、价格为10(含)以上的产品供应商:

输入:

select vend_id,count(*) as num_prods from products where prod_price >= 10 group by vend_id having count(*) >=2;

输出:

QQ截图20170509101302.png

分析:这条语句中,第一行是使用了聚集函数的基本 SELECT ,它与前面的例子很相像。 WHERE 子句过滤所有 prod_price 至少为 10 的行。然后按 vend_id 分组数据, HAVING 子句过滤计数为 2 或 2 以上的分组。

如果没有 WHERE 子句,将会多检索出两行(供应商 1002 ,销售的所有产品价格都在 10 以下;供应商 1001 ,销售3个产品,但只有一个产品的价格大于等于 10 ):

输入:select vend_id,count(*) as num_prods from products group by vend_id having count(*) >=2;

输出:

QQ截图20170509133420.png

【相关推荐】

  1. mysql数据分组和排序及SELECT子句顺序

  2. mysql数据分组:创建分组

以上就是mysql数据分组:过滤分组的详细内容,更多请关注微课江湖其它相关文章!

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

  • 关于Mysql如何将数据分组后取出时间最近的数据详解
  • mysql数据分组:过滤分组
  • mysql数据分组和排序及SELECT子句顺序
  • mysql数据分组:创建分组

相关文章

  • 2018-12-05sql 创建数据库与删除数据库
  • 2018-12-05SQL语句的基本语法
  • 2017-05-11用MyEclipse配置DataBase Explorer(图示)
  • 2018-12-05MySQL中使用replace、regexp进行正则表达式替换的用法分析
  • 2018-12-05SQL里类似SPLIT的分割字符串函数
  • 2018-12-05不同情况下的MySQL 的迁移方案(推荐)
  • 2018-12-05Oracle 子程序参数模式,IN,OUT,NOCOPY
  • 2017-05-11MySQL数据库char与varchar的区别分析及使用建议
  • 2018-12-05全面接触SQL语法(2)
  • 2018-12-05oracle SCN跟TIMESTAMP之间转换

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • MySQL ERROR 1862: Your password has expired.
    • 安装SQL2005提示 找不到任何SQL2005组件的问题解决方案
    • oracle 删除重复数据
    • MySQL日期数据类型、时间类型使用总结
    • powerdesigner 的 PDM文件转excel的方法
    • mysql Load Data InFile 的用法
    • mysql 存在该记录则更新,不存在则插入记录的sql
    • Ubuntu10下如何搭建MySQL Proxy读写分离探讨
    • sql2005开启xp_cmdshell
    • 解决MySQL Workbench gnome-keyring-daemon错误的方法分享

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有