在SQL中,当使用带有“having”子句的聚合函数时,该函数是否必须位于select语句中?

在SQL中,当使用带有“having”子句的聚合函数时,该函数是否必须位于select语句中?,sql,database,Sql,Database,select语句中的“聚合函数列名称”必须与having子句中的相同吗 不可以。您可以在HAVING子句中使用不同的聚合函数。它不取决于SELECT子句 例如: SELECT column_name, SUM(column_name) FROM table_name WHERE column_name IS NOT NULL GROUP BY column_name HAVING COUNT(column_name) > 1; 这也是有效的: SELECT column_name_1,

select语句中的“聚合函数列名称”必须与having子句中的相同吗


不可以。您可以在HAVING子句中使用不同的聚合函数。它不取决于SELECT子句

例如:

SELECT column_name, SUM(column_name)
FROM table_name
WHERE column_name IS NOT NULL
GROUP BY column_name
HAVING COUNT(column_name) > 1;
这也是有效的:

SELECT column_name_1, SUM(column_name_2)
FROM table_name
WHERE column_name_3 IS NOT NULL
GROUP BY column_name_1
HAVING COUNT(column_name_4) > 1;

您不可能同时使用SQL Server作为Microsoft产品和MySQL作为Oracle产品。选择实际适用于您的问题的标签。这两种产品的语法和功能截然不同。标签在这里有特定的含义。请不要只是随机添加它们,因为它们有您熟悉的单词或它们看起来很相似。不,通常不必在select中。它不必与HAVING子句中的内容相同。在选择未分组的字段时,只需具有某种聚合。通过你为什么不试试呢@肯怀特:为什么?我曾经在一个系统上工作,在这个系统中,客户可以选择SQL Server、Oracle和MS Access作为DBMS。这就是我倾向于选择标准SQL的原因之一@有一天,这不仅仅是关于向后兼容性。拥有是一种句法上的糖分。您可以不使用它,但您真的想在每次筛选聚合结果时开始嵌套查询吗?Teradata已经插入了自己的QUALIFY子句,用于在windows函数上进行过滤,并且那里的代码非常干净。没有更多选择。。。从选择…,按…划分的行数。。。订购人。。。作为注册护士。。。从…起t,其中rn=1;
SELECT column_name_1, SUM(column_name_2)
FROM table_name
WHERE column_name_3 IS NOT NULL
GROUP BY column_name_1
HAVING COUNT(column_name_4) > 1;