mysql having and or_MySQL HAVING子句

在本教程中,我们将学习如何使用MySQL HAVING子句来指定行分组或聚合的过滤条件。

MySQL HAVING子句

MySQL的HAVING子句在SELECT语句中是用来为某一组行或聚合指定过滤条件。

MySQL的HAVING子句通常与GROUP BY子句一起使用。当它在GROUP BY子句中使用时,我们可以应用它在GROUP BY子句之后来指定过滤的条件。如果省略了GROUP BY子句,HAVING子句行为就像WHERE子句一样。

请注意,HAVING子句应用筛选条件每一个分组的行,而WHERE子句的过滤条件是过滤每个单独的行。

MySQL HAVING子句的示例

让我们来看看使用MySQL HAVING子句的例子。在这里将使用示例数据库(studymysql)中的 order_detail 表作为示范。其表结构如下所示 -

我们可以使用GROUP BY子句来获得订单编号,每个订单销售的产品数量,以及每个订单的总额:

1

2

3

4

5

6

7

SELECT

order_id,

SUM(buy_number)AS buy_count,

SUM(total_money) AS money_count

FROM

studymysql.order_detail

GROUP BY order_id;

执行上面的 SQL 语句后,得到下面的结果 -

现在,要查找那些销售总额超过 1500000 的订单信息。使用MySQL HAVING子句和聚合函数如下:

1

2

3

4

5

6

7

8

SELECT

order_id,

SUM(buy_number)AS items_count,

SUM(total_money) AS sum_total_money

FROM

studymysql.order_detail

GROUP BY order_id

HAVING sum_total_money>1500000;

执行上面的 SQL 语句后,得到下面的结果 -

我们还可以构造并使用逻辑运算符,如在HAVING子句中OR和AND运算符实现更复杂一点的过滤条件。假设要查找 order 表中总销售额大于100000,并且一个订单中包含 6 种以上的产品,参考使用下面的查询:

1

2

3

4

5

6

7

8

SELECT

order_id,

SUM(buy_number) AS items_count,

SUM(total_money) AS total

FROM

studymysql.order_detail

GROUP BY order_id

HAVING total>1000000 AND items_count>350;

执行上面的 SQL 语句后,得到下面的结果 -

假设要查找已发货(status=2)并且总销售额超过 160000 的所有订单,我们可以通过使用INNER JOIN子句将 order 表连接 order_detail 表,并在 status 和 total 列上指定条件,如下查询所示:

1

2

3

4

5

6

7

8

SELECT

od.order_id, SUM(od.total_money) total, o.status

FROM

studymysql.order_detail od

INNER JOIN

studymysql.order o ON od.order_id=o.order_id

GROUP BY od.order_id

HAVING o.status='2' AND total>160000 ;

执行上面的 SQL 语句后,得到下面的结果 -

当我们要通过GROUP BY子句来实现高级的报表输出时,使用HAVING子句就非常有用了。例如,我们可以使用HAVING子句来实现一些类似的查询,如:这个月,本季度和今年累计销售额超过10000 的订单信息。

在本教程中,您已经学会了如何使用MySQL HAVING子句在GROUP BY中来指定记录或聚集组的筛选条件。

相关教程

Using MySQL SELECT Statement to Query Data

MySQL GROUP BY

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值