假设我有以下聚合函数:
是否可以像这样编写有效的 SQL(以与数据库无关的方式):
SELECT [COL1, COL2 ....], AGG1(param1), AGG2(param2) FROM [SOME TABLES]
WHERE [SOME CRITERIA]
HAVING AGG3(param2) >-1 and AGG4(param4) < 123
GROUP BY COL1, COL2, ... COLN
ORDER BY COL1, COLN ASC
LIMIT 10
其中 COL1 ... COLN 是正在查询的表中的列,param1 ... paramX 是传递给 AGG 函数的参数。
注意:AGG1和AGG2在结果中作为列返回(但不会出现在HAVING CLAUSE中,AGG3和AGG4出现在HAVING CLAUSE中但不会在结果集中返回。
理想情况下,我想要一个与数据库无关的解决方案答案,但如果我必须绑定到数据库,我将使用 PostgreSQL (v9.x)。
Edit
只是需要澄清一下:我不反对在查询中使用 GROUP BY。我的 SQL 不是很好,所以上面的示例 SQL 可能有点误导。我编辑了上面的伪 sql 语句,希望能让我的意图更清楚。
我想知道的主要问题是使用 AGG 函数的选择查询是否可以:
- 在返回的列中包含聚合函数值,而无需在 HAVING 子句中指定它们。
- 在 HAVING 子句中指定聚合函数,但不会在结果集中返回。
从迄今为止我收到的答案来看,这两个问题的答案似乎都是肯定的。我唯一需要纠正 SQL 的想法是添加 GROUP BY 子句以确保返回的行是唯一的。