如何在 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 次。