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

SQL:如何在按部分分组的查询中使用子查询?

江温书
2023-03-14
问题内容

如何在按部分分组的查询中使用子查询?

我使用SQL Server 2008 R2和Delphi 2010

我收到此错误:

Cannot perform an aggregate function on an expression 
containing an aggregate or a sub query.

像这个查询:

select 
    t1.sen, 
    sum(t1.d1)as d1, 
    sum(t1.d2)as d2, 
    sum(t1.d1+t1.d2) as d_sum,
    Round((sum((1000*(t1.d1+t1.d2))/(9500-(
       select sum(t2.t_shab+t2.t_rooz) 
       from tbl1 t2 
       where FCode=81 AND DCode=1 AND t2.sen<=t1.sen
    )))),1) as SSS 
from 
    tbl1 t1 
where 
    FCode = 81 
    AND DCode = 1

按t1.sen分组


问题答案:

这是真实的方式

create function getSumBSen2(@pfcode INT, @pdcode INT, @pSen INT) returns int
as
begin
     declare @r int; 
     select 
        @r= sum(t2.t_shab + t2.t_rooz)
     from 
         tbl1 t2 
     where 
         t2.FCode = @pfcode 
     and t2.DCode = @pdcode 
     and t2.sen <= @pSen;

     return (@r);
end;
GO

select 
    t1.sen, 
    sum(t1.d1) as d1, 
    sum(t1.d2) as d2, 
    sum(t1.d1 + t1.d2) as d_sum,
    Round((sum((1000*(t1.d1+t1.d2)+0.01)/(9500-(dbo.getSumBSen2(t1.FCode, t1.DCode, t1.sen))))),1) as SSS 
from 
    tbl1 t1
where 
    t1.FCode = 81 
and t1.DCode = 1 
group by 
    t1.sen;


 类似资料:
  • 问题内容: 我正在尝试在postgres中的查询中使用group by。我无法按照我想要的方式对其进行工作,以便根据需要对结果进行分组。 这是对我刚刚回答的递归查询的另一个堆栈问题的扩展。但是现在我需要能够将结果分组到最终查询的root_id列上。这是之前的查询: 这是我想做的,以便将具有相同parent_comment_id的所有记录保存在一起。 可能有许多记录返回了相同的parent_comm

  • 我有一个表abc,其中可以针对一个UserId有一个或多个行。abc表有列值。我希望结果是每个UserId值的总和。 示例:userid1- 我现在拥有的: 结果:它单独返回每行的总和。所以我有这样的: 用户标识1- 我应该更改或添加什么来完成查询? PS.我知道这是一个非常常见/简单的解决方案,但似乎找不到任何解决方案。:(

  • 我必须计算ARPU(收入/#用户),但我得到了这个错误: 子查询使用外部查询第7行的未分组列“usage_records.date”:WHERE created_at<=date_trunc('day',usage_records.d...^) null

  • 问题内容: 我正在尝试计算表中的最大值以及该表中的其他值。但是,我为此做的表不是“真实”表,而是由子查询生成的表。这给我带来了问题,因为我认为如果不重新指定整个子查询就无法两次加入它。 我目前有一个SQL Server解决方案,使用,但我正在寻找与DBMS无关的版本,因为该项目的单元测试在不具有此功能的Sqlite DB中运行。 如果它们有用,这是架构和我的SQL Server特定查询: Cour

  • 问题内容: 我需要按Field1的值对所有记录进行分组,并为每个组计算Field2的最大值。因此,有什么方法可以使最大聚合作用在同一查询中的多个组上? 问题答案:

  • 问题内容: 我有如下查询 我想以某种方式重用 我简化了上面的查询,但是实际上上面的选择是巨大而复杂的。我不想负担确保两者同步 我没有任何以编程方式重用它的方法。排除了T-SQL。我只能写简单的查询。这是应用程序的限制。 有没有一种方法可以在单个语句中重用相同的子查询 问题答案: 如果您使用的是SQL Server 2005+,请使用公用表表达式(CTE):