📜  PostgreSQL-HAVING子句(1)

📅  最后修改于: 2023-12-03 15:03:50.127000             🧑  作者: Mango

PostgreSQL HAVING 子句

在 PostgreSQL 中,HAVING 子句用于筛选聚合函数之后的结果集。

基本语法:

SELECT 列名1, 列名2, 聚合函数(列名)
FROM 表名
GROUP BY 列名1, 列名2
HAVING 聚合函数(列名) 条件;

其中,聚合函数包括 COUNT, SUM, AVG, MAX, MIN 等。条件可以是普通的比较运算符(如 <, >, =, != 等)和逻辑运算符(如 AND, OR, NOT 等)。

下面是一个简单的例子,查找商品销售额最高的店铺:

SELECT store_id, SUM(price * quantity) as total_sales
FROM orders
GROUP BY store_id
HAVING total_sales = (SELECT MAX(total_sales) FROM (SELECT store_id, SUM(price * quantity) as total_sales FROM orders GROUP BY store_id) as sales);

上面的语句会首先按店铺分组计算出销售额,然后筛选出销售额最高的店铺。

除了使用单个聚合函数,还可以使用多个聚合函数来对结果集进行筛选。

SELECT category, AVG(price) as avg_price, COUNT(*) as total_items
FROM products
GROUP BY category
HAVING AVG(price) > 100 AND COUNT(*) > 10;

上面的语句会计算出每个类别的平均价格和总数量,然后筛选出平均价格大于 100 并且总数量大于 10 的类别。

需要注意的是,HAVING 子句必须跟在 GROUP BY 子句后面,而且只能对聚合函数进行筛选,不能对普通列进行筛选。如果想要对普通列进行筛选,可以使用 WHERE 子句。