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

不能在用于GROUP BY子句的group by列表的表达式中使用聚合或子查询

邢俊悟
2023-03-14
问题内容

在下面的SQL语句中,我得到以下错误

不能在用于GROUP BY子句的group by列表的表达式中使用聚合或子查询。

我该如何解决?

SELECT
    T.Post,
    COUNT(*) AS ClientCount,
    Client = CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END
FROM
    MyTable T
GROUP BY
    T.Post,
    CASE COUNT(*) WHEN '1' THEN T.Client ELSE '[Clients]' END

问题答案:

除非您将包括在内T.Client,否则您GROUP BY只能在聚合函数中包括该字段。在您的情况下,按该字段分组会改变逻辑,因此就没有了(并且与您按CASE语句进行分组的尝试有关)。而是包装T.Client一个聚合函数。

这样,您的组仍然是相同的,并且根据CASE语句的测试,当只有一行时,您知道聚合函数将给出什么结果。

SELECT
  T.Post,
  ClientCount = COUNT(*) AS ClientCount,
  Client      = CASE COUNT(*) WHEN 1 THEN MAX(T.Client) ELSE '[Clients]' END
FROM
  MyTable T
GROUP BY
  T.Post


 类似资料:
  • 我有一个与此有点类似的要求。我的API支持有8个以上过滤器参数的过滤器。因此,我想根据传递的筛选器参数动态创建一个查询。我正在使用创建动态查询。 现在,我能够成功地创建动态查询,但当用户想要对函数进行排序时,问题就来了。在我的查询中,我有4个聚合(计数)函数。因此,为了支持对这些列进行排序,我只使用这个聚合函数的,但我想要的是使用这个的 在和中重复在我看来是不对的。那么,有没有解决这个问题的办法。

  • 问题内容: 我的存储过程有问题。 我收到错误消息: 无法对包含聚合或子查询的表达式执行聚合功能 这是我认为发生错误的存储过程的一部分: 谢谢你。 问题答案: 如果您无论如何都要避免相关的子查询,通常可以得到更好的性能: 假设在Products表中最多只能有一个匹配项(Products,而不是Table_Products- 当然是一个表,因此不要在名称中加上该匹配项)。换句话说,如果product是

  • 问题内容: 我正在使用spring-data-jpa和querydsl(3.2.3) ,有一种情况是我根据用户文件管理器/输入创建谓词集。所有这些都来了。 我的简化模型如下所示: 现在,我正在努力的是这个查询: 因此,基本上我需要以类似的格式进行子查询,该格式将获取所有公司编号并将其设置为in()表达式。 我的spring- data存储库实现了反过来扩展和的工具。 我希望答案很简单,但是我对qu

  • 我正在使用spring-data-jpa和querydsl(3.2.3) 在一个场景中,我正在基于用户filer/input创建一组谓词。所有这些都来自。 我的spring-data存储库实现了,它又扩展了和。 我希望这方面的答案是直接的,但我对querydsl还是个新手,到目前为止还没有找到解决方案。

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

  • 问题内容: 我试图在pySpark的一行代码中进行多项操作,但不确定我的情况是否可行。 我的意图是不必将输出另存为新的数据框。 我当前的代码非常简单: 我的意图是在使用后添加,以得到与每个 列值匹配的记录计数,这些记录打印\显示为输出。 尝试使用时,出现异常。 有什么方法可以同时实现和 .show()打印,而无需将代码拆分为两行命令,例如: 或更好的办法是将合并的输出输出到-额外的一栏,用于说明与