当前位置: 首页 > 面试题库 >

SQL Server无法对包含聚合或子查询的表达式执行聚合功能

甄德寿
2023-03-14
问题内容

我的存储过程有问题。

我收到错误消息:

无法对包含聚合或子查询的表达式执行聚合功能

这是我认为发生错误的存储过程的一部分:

SELECT column_1, column_2,
       SUM(CASE WHEN column_2 NOT IN (SELECT product FROM table_products) THEN 1
                ELSE 0
           END) AS Total
FROM my_table 
WHERE is_rated = '1'
GROUP BY column_1, column_2

谢谢你。


问题答案:

如果您无论如何都要避免相关的子查询,通常可以得到更好的性能:

SELECT
    MT.column_1,
    MT.column_2,
    SUM(CASE WHEN P.product IS NULL THEN 1 ELSE 0 END) AS total
FROM
    My_Table MT
LEFT OUTER JOIN Products P ON P.product = MT.column_2
WHERE
    MT.is_rated = '1'
GROUP BY
    MT.column_1,
    MT.column_2

假设在Products表中最多只能有一个匹配项(Products,而不是Table_Products-
当然是一个表,因此不要在名称中加上该匹配项)。换句话说,如果product是Products表的PK(或AK),则此方法将起作用。

如果不是这种情况,并且Products表中可能有多个匹配项,则可以JOIN转到DISTINCT在该product列上使用的子查询。



 类似资料:
  • 问题内容: 之前已经讨论过这个问题,但是没有一个答案可以解决我的特定问题,因为我正在处理内部和外部selects中的不同where子句。该查询在Sybase下执行得很好,但是在SQL Server下执行时,此标题中出现错误。该查询很复杂,但是查询的总体轮廓为: 下面介绍了我要解决的情况: 除“总数”和“其他”外,所有组码均代表种族 组代码“总计”代表所有种族的毕业生总数 但是,缺少多种族,因此种族

  • 我想用JPA编写以下查询,以检索按和分组的指令的计数。我知道以下SQL可以工作: 我想从这个查询中获取结果,并将其映射到一个新的对象调用: 问题所在

  • 问题内容: 我有一个XYZ模型,我需要获取给定查询集的字段a,b和表达式x / y的最大值。 它适用于田野。就像是: 但是,我找不到一种针对表达式的方法。尝试类似的东西: 给出一个错误: 尝试类似的东西: 给出一个错误: 甚至像: 同样不起作用,并给出与上述相同的错误: 我发现可以做到的一个技巧是: 之所以有效,是因为它会生成正确的SQL,但令人困惑,因为我确实在z属性处获得了正确的值,但没有获得

  • 我有以下JPA实体(getter、setter和非相关字段省略): 我的目标是使用JPQL或criteriaAPI实现查询,它将返回每天的平均事务量和最大事务量。 产生预期结果的原生SQL查询(MySQL数据库)如下所示: 遗憾的是,不鼓励使用本机 SQL 查询,并且 JPQL 不允许在 where 子句中使用子查询。 提前谢谢你。 附加: 我从以下Spring数据查询开始: 但显然没有用: 我可

  • >[danger] 注意!!! 使用聚合功能时,必须给它一个别名,以便能够从模型中访问它 > 聚合函数的计算,都是排除了 null 值,所以COUNT( id ) 一般推荐用非空的主键来计算 COUNT 计算数量 const { Sequelize } = app; // 查询班级总人数,按照姓名聚合 const ret = await Student.findAll({ attribut

  • 在应用中我们经常会用到一些统计数据,例如当前所有(或者满足某些条件)的用户数、所有用户的最大积分、用户的平均成绩等等,ThinkPHP为这些统计操作提供了一系列的内置方法,包括: 方法 说明 count 统计数量,参数是要统计的字段名(可选) max 获取最大值,参数是要统计的字段名(必须) min 获取最小值,参数是要统计的字段名(必须) avg 获取平均值,参数是要统计的字段名(必须) sum