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_name
GROUP 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:查询订单中数量最大的商品的订单号和数量。

```sql
SELECT order_id, MAX(quantity) AS max_quantity
FROM order_items
GROUP 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连接,进行更加复杂的数据筛选和处理。

数据运维技术 » MySQL中HAVING的使用及示例(mysql中hving)