在大学的一次测试中,有一个问题;是否可以在SQL WHERE子句中使用聚合函数.

我一直认为这是不可能的,我也找不到任何可能的例子.但我的答案被标记为false,现在我想知道在哪些情况下可以在WHERE中使用聚合函数.此外,如果不可能的话,最好能找到描述它的规范的链接.

推荐答案

你没有提到数据库管理系统.假设您使用的是MS SQL Server,我发现一条T-SQL错误消息不言自明:

"聚合可能不会出现在

http://www.sql-server-performance.com/


以及一个在子查询中可能实现的示例.

显示所有客户和最小订单,对于那些有5个或更多订单的客户(其他客户为空):

SELECT a.lastname
     , a.firstname
     , ( SELECT MIN( o.amount )
         FROM orders o
         WHERE a.customerid = o.customerid
           AND COUNT( a.customerid ) >= 5
        )
        AS smallestOrderAmount
FROM account a
GROUP BY a.customerid
       , a.lastname
       , a.firstname ;

使现代化

上面的代码在SQL Server和MySQL中都运行,但它没有返回我预期的结果.下一个更接近.我猜这与字段customerid有关,按分组并在查询子查询联接中使用的字段customerid在第一种情况下是外部表的主键,而在第二种情况下不是.

显示拥有5个或更多订单的客户的所有客户ID和订单数量(其他客户为空):

SELECT o.customerid
     , ( SELECT COUNT( o.customerid )
         FROM account a
         WHERE a.customerid = o.customerid
           AND COUNT( o.customerid ) >= 5
        )
        AS cnt
FROM orders o
GROUP BY o.customerid ;

Sql相关问答推荐

Postgres从组中 Select 具有相反排序顺序的行

Click house在数组中生成X行Y随机数

PostgreSQL:如果发现多行具有相似列值,则跳过 Select 行

SQL更新,在2个额外的表上使用内部连接

如何转换和汇总行数

如何将资源密集型自连接转换为更快的查询?

如何退回当年的所有参赛作品?""

为什么Prisma生成唯一索引,而不是基于方案上的唯一列约束?

防止ActiveRecord迁移在db/structure.sql中进行巨大更改

如何从Spark SQL的JSON列中提取动态数量的键值对

Postgresql - 如何根据阈值计算累积和

如何 for each id创建长度等于id长度的不同日期序列?

snowflake中的动态文件名生成

将varchar (7)列转换为datetime

如何创建一个递归计数器来查找一个元素有多少父级和子级?

使用ALTER TABLE无法删除列

如何显示最常引用条目的详细信息

如何对 SQL 表中的连续时间戳进行分组?

在 BigQuery 数据集中查找表大小和占总数据集大小的百分比

如果当前日期是一周中的某一天,则从另一天提取结果