MySQL中HAVING的使用及示例(mysql中hving)
MySQL中HAVING的使用及示例
MySQL中的HAVING语句用于对查询结果进行筛选。与WHERE语句不同的是,HAVING语句可以在GROUP BY分组后对分组结果进行筛选。在使用GROUP BY语句进行分组的情况下,SELECT语句中不可以使用聚合函数之外的列,否则会提示错误。但若需要对聚合函数的结果进行筛选,则可以使用HAVING语句。
使用语法:
SELECT column_name, aggregate_function(column_name)
FROM table_nameGROUP BY column_name
HAVING aggregate_function(column_name) condition;
其中,condition是筛选条件,可以使用>、
下面,我们来看一些例子。
假设有以下一张订单表order_items,列名分别为order_id、item_id和quantity:
| order_id | item_id | quantity |
|———-|———|———-|
| 1 | 1 | 2 |
| 1 | 2 | 3 |
| 2 | 1 | 1 |
| 2 | 3 | 2 |
| 3 | 2 | 1 |
| 3 | 3 | 2 |
例1:查询每个订单的总数量大于等于4的订单号和总数量。
“`sql
SELECT order_id, SUM(quantity) AS total_quantity
FROM order_items
GROUP BY order_id
HAVING total_quantity >= 4;
运行结果为:
| order_id | total_quantity ||----------|----------------|
| 1 | 5 || 3 | 3 |
该语句首先根据订单号分组,然后计算每个订单的总数量,并给该列起别名total_quantity。最后使用HAVING语句对总数量进行筛选,只保留总数量大于等于4的记录。
例2:查询订单中数量最大的商品的订单号和数量。
```sqlSELECT order_id, MAX(quantity) AS max_quantity
FROM order_itemsGROUP BY order_id
HAVING max_quantity = (SELECT MAX(quantity) FROM order_items);
运行结果为:
| order_id | max_quantity |
|———-|————–|
| 1 | 3 |
| 2 | 2 |
| 3 | 2 |
该语句首先根据订单号分组,然后计算每个订单中商品数量的最大值,并给该列起别名max_quantity。接着,使用HAVING语句筛选出数量等于最大值的记录。为了获取最大值,还需要在HAVING语句中使用子查询来计算表中的最大值。
例3:查询数量大于等于2的商品中销售总量最多的商品ID和销售总量。
“`sql
SELECT item_id, SUM(quantity) AS total_quantity
FROM order_items
GROUP BY item_id
HAVING SUM(quantity) >= 2
ORDER BY total_quantity DESC
LIMIT 1;
运行结果为:
| item_id | total_quantity ||---------|---------------|
| 3 | 4 |
该语句首先根据商品ID分组,计算销售总量,并给该列起别名total_quantity。使用HAVING语句筛选出销售总量大于等于2的记录,并按照销售总量降序排列。最后使用LIMIT语句只保留第一行记录,即销售总量最多的商品ID和销售总量。
在实际使用中,HAVING语句可以和其他语句一起使用,例如JOIN、UNION和IN等。同时也可以使用多个筛选条件,通过AND或OR连接,进行更加复杂的数据筛选和处理。