📜  如何在 SQL 中将 HAVING 与聚合函数一起使用?

📅  最后修改于: 2022-05-13 01:54:58.687000             🧑  作者: Mango

如何在 SQL 中将 HAVING 与聚合函数一起使用?

SQL 提供了许多内置函数来执行任务。有 4 种类型的函数 Date 函数、Char 函数、Numeric 函数和 Aggregate 函数。

在这里,我们将研究聚合函数以及如何将它们与HAVING关键字一起使用。

聚合函数是数据库内置函数,作用于表的多行并产生单个输出。基本上有 5 个我们在 SQL 中经常使用的聚合函数。聚合函数是确定性的。常见的聚合函数如下:

  • COUNT() 计算表中的总行数,它返回单个值。
  • AVG() 计算应用到列的值的平均值。
  • MIN() 返回它应用到的列中的最小值。
  • MAX() 返回它应用到的列中的最大值。
  • SUM() 返回它应用到的列的所有值的总和。

何时使用HAVING关键字?

我们用于在给定条件下过滤数据的 WHERE 关键字适用于算术运算运算符、运算符等 SQL 运算运算符,但是当涉及聚合函数时,我们使用 HAVING 关键字对给定条件下的数据进行排序。 GROUP BY 子句也与 HAVING 关键字一起使用。

句法:

SELECT column_name(s) 
FROM table_name 
WHERE condition 
GROUP BY expression 
HAVING condition 
ORDER BY expression 
LIMIT value;

将 SUM() 与 Have 子句一起使用:

第一步:创建数据库

询问:

CREATE DATABASE database_name;

第 2 步:创建一个名为 products 的表。

询问:

CREATE TABLE PRODUCTS(product_id int primary key, product_name varchar(45), product_cost float);

步骤 3:在表中插入值

询问:

INSERT INTO PRODUCTS VALUES 
(1001, 'Colgate Toothpaste', 2.25), (1002 'T-Shirt', 5), 
(1003, 'Jeans', 6.5), (1004, 'Shorts', 4.5), 
(1005, 'Sneakers', 8.99), (1007, 'Mouthwash', 3.35), 
(1008, 'Denim Jeans', 8.99), (1009, 'Synsodyne Toothpaste', 3.35);

第 4 步:现在让我们看看 products 表的内容。

询问:

SELECT * FROM products;

输出:

第 5 步:现在我们的任务是打印所有产品成本总和大于 3.50 的产品。

询问:

SELECT product_name, product_cost  
FROM products  
GROUP BY product_name, product_cost  
HAVING SUM(product_cost) > 3.5  
ORDER BY product_cost;

输出:

产品表

这里只显示那些成本大于 3.5 的产品

将 MAX() 和 MIN() 与 Have 子句一起使用

我们使用的产品表与上一个示例中使用的产品表相同。

我们的任务是找到最高价格大于 7 的产品名称和最低价格小于 3 的产品名称。

询问:

SELECT * FROM products;

QUERY 1(查找最高价格大于 7 的产品)

SELECT product_name 
FROM products 
GROUP BY product_name 
HAVING MAX(product_cost) > 7;

输出

QUERY 2(查找最低价格低于 3 的产品)

SELECT product_name 
FROM products 
GROUP BY product_name 
HAVING MIN(product_cost) < 3;

输出:

将 AVG() 与 Have 子句一起使用

我们将使用产品表来演示这部分。

询问:

SELECT * FROM products;

现在,我们要选择那些价格大于产品表平均价格的产品。

询问:

SELECT product_name
FROM products
GROUP BY product_name
HAVING AVG(product_cost) > (SELECT AVG(product_cost) FROM products);

输出:

此处仅显示平均价格高于产品表的平均价格的产品。

将 Count() 与 Have 子句一起使用

第 1 步:我们将创建一个数据库。

询问:

CREATE DATABASE database_name;

第二步:创建表登录。

询问:

CREATE TABLE login(signin_id int PRIMARY KEY ,customer_id int, date_login date);

第 3 步:在表中插入值。

询问:

INSERT INTO login values
(1, 121, '2021-10-21'), (2, 135, '2021-05-25'),  
(3, 314, '2021-03-13'), (4, 245, '2021-07-19'),  
(5, 672, '2021-09-23'), (6, 135, '2021-06-12'),  
(7,120,'2021-06-14'), (8, 121, '2021-04-24'),  
(9,135, '2021-06-15'), (10, 984, '2021-01-30');

第 4 步:显示表格的内容。

询问:

SELECT * FROM login;

输出:

现在我们要显示至少出现 2 次的客户 ID。

询问:

SELECT customer_id  
FROM login
 GROUP BY customer_id 
HAVING COUNT(customer_id) >=2 ;

输出:

这里 customer_id 121 和 135 至少出现了 2 次。