SQL HAVING 子句用于从组中筛选数据,它与 SELECT 子句的 WHERE 子句非常相似,但是它们之间有一个重要的区别。WHERE 子句用于在查询中过滤行,而 HAVING 子句用于在分组后过滤组。
HAVING 子句必须与 GROUP BY 子句一起使用,因为它引用列的分组。如果不使用 GROUP BY,HAVING 将忽略请求并生成错误。
SELECT column_name(s) FROM table_name WHERE condition GROUP BY column_name(s) HAVING condition;
HAVING 语法允许我们在 SELECT 语句中使用聚合函数(例如 COUNT、MAX、MIN、SUM 等)。它允许我们根据聚合函数的值来过滤行。例如,我们可以使用 HAVING 条件来显示所有具有大于 10 的总销售额的客户。
SELECT CustomerName, SUM(OrderPrice) AS TotalSales FROM Orders GROUP BY CustomerName HAVING SUM(OrderPrice) > 10;
此外,HAVING 还允许我们在 SELECT 语句中使用 AND、OR 操作符来连接多个条件。例如,我们可以使用 HAVING 条件来显示所有具有大于 10 的总销售额并且小于 20 的客户。
SELECT CustomerName, SUM(OrderPrice) AS TotalSales FROM Orders GROUP BY CustomerName HAVING SUM(OrderPrice) > 10 AND SUM(OrderPrice) < 20;
HAVING
子句使你能够指定过滤条件,从而控制查询结果中哪些组可以出现在最终结果里面。
WHERE
子句对被选择的列施加条件,而 HAVING
子句则对 GROUP BY
子句所产生的组施加条件。
下面可以看到 HAVING
子句在 SEL ECT
查询中的位置:
SELECT
FROM
WHERE
GROUP BY
HAVING
ORDER BY
在 SELECT
查询中,HAVING
子句必须紧随 GROUP BY
子句,并出现在 ORDER BY
子句(如果有的话)之前。带有 HAVING
子句的 SELECT
语句的语法如下所示:
SELECT column1, column2
FROM table1, table2
WHERE [ conditions ]
GROUP BY column1, column2
HAVING [ conditions ]
ORDER BY column1, column2
考虑 CUSTOMERS
表,表中的记录如下所示:
+----+----------+-----+-----------+----------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+-----------+----------+
| 1 | Ramesh | 32 | Ahmedabad | 2000.00 |
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 3 | kaushik | 23 | Kota | 2000.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
| 5 | Hardik | 27 | Bhopal | 8500.00 |
| 6 | Komal | 22 | MP | 4500.00 |
| 7 | Muffy | 24 | Indore | 10000.00 |
+----+----------+-----+-----------+----------+
下面是一个有关 HAVING
子句使用的实例,该实例将会筛选出出现次数大于或等于 2 的所有记录。
SQL > SELECT ID, NAME, AGE, ADDRESS, SALARY
FROM CUSTOMERS
GROUP BY age
HAVING COUNT(age) >= 2;
其执行结果如下所示:
+----+----------+-----+---------+---------+
| ID | NAME | AGE | ADDRESS | SALARY |
+----+----------+-----+---------+---------+
| 2 | Khilan | 25 | Delhi | 1500.00 |
| 4 | Chaitali | 25 | Mumbai | 6500.00 |
+----+----------+-----+---------+---------+
现在我们想要查找总访问量大于 200 的网站。
我们使用下面的 SQL 语句:
SELECT Websites.name, Websites.url, SUM(access_log.count) AS nums FROM (access_log
INNER JOIN Websites ON access_log.site_id=Websites.id)
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
执行以上 SQL 输出结果如下:
现在我们想要查找总访问量大于 200 的网站,并且 alexa 排名小于 200。
我们在 SQL 语句中增加一个普通的 WHERE 子句:
SELECT Websites.name, SUM(access_log.count) AS nums FROM Websites
INNER JOIN access_log
ON Websites.id=access_log.site_id
WHERE Websites.alexa < 200
GROUP BY Websites.name
HAVING SUM(access_log.count) > 200;
执行以上 SQL 输出结果如下:
SystemSettingsHelperjava.lang.Object |---ohos.agp.utils.SystemSettingsHelperpublic class SystemSettingsHelperextends Obj...
RowSetEventjava.lang.Object |---java.util.EventObject |---|---javax.sql.RowSetEventpublic class RowSetEventextends Event...
ActionSheet底部弹起的操作按钮组件代码引入在 page.json 中引入组件{"usingComponents": {"mp-actionSheet": "../../components...
sm-crypto小程序 js 库。国密算法 sm2、sm3 和 sm4 的实现。使用此组件需要依赖小程序基础库 2.2.1 以上版本,同时依赖开发者工...
为了理解HTML和XHTML之间的细微差别,请考虑将有效且格式良好的XHTML 1.0文档转换为有效的HTML 4.01文档。要做这个翻译需要以下...
HTML和XHTML之间的区别在XHTML中,所有的标签都是小写的。它不支持大写的标签。HTML中使用的一些标签在XHTML中不推荐使用。XHTML...