【问题标题】:How to avoid GROUP BY in SQL view如何在 SQL 视图中避免 GROUP BY
【发布时间】:2012-07-20 18:55:08
【问题描述】:

我有一个 sql 视图。示例如下。问题是我想使用所有字段,但我不想按每个字段分组。我该如何规避呢?我只需要在 fieldA 上分组,而不是其他人……实际上与其他人分组会弄乱我想看到的数据。我正在使用 SQL Server 2008。谢谢!

select 
fieldA,
fieldB,
fieldC,
fieldD,
....
from my_table as a join other_table b on a.id=b.id
group by fieldA, fieldB, fieldC, fieldD

【问题讨论】:

  • 只有在使用SUMCOUNTMINMAX 等聚合函数时才使用GROUP BY。你的意思是ORDER BY
  • 你能提供更多关于你想要做什么的细节吗?可能会发布一些示例数据。
  • 我认为下面的答案是合理的想法,但我想知道是不是“弄乱了数据”部分才真正让您感到困惑。我认为我们不知道您的意思,直到我们知道您要完成的工作。我开始同意上面的ORDER BY 注释。

标签: sql sql-server sql-server-2008 group-by


【解决方案1】:

通常,当我想选择多个字段并仅基于其中一个字段聚合某些内容时,我将在派生表中执行聚合并加入我要从中选择的表,如下所示:

select fieldA, thingYouWantToAggregate, fieldB, fieldC, fieldD
from my_table
inner join
(
    select fieldA, thingYouWantToAggregate
    from my_table
    group by fieldA

) rsAggregated on rsAggregated.fieldA = my_table.fieldA

【讨论】:

  • 我正要提出同样的方法。我猜其他人没有看“实际上与其他人分组混淆数据”这句话。因此加入似乎比聚合函数更好。
  • 如果您使用的是 2008,CROSS APPLYOUTER APPLY 也可能有用。
【解决方案2】:

您需要对不想包含在分组依据的列使用聚合函数。我一般用min

select 
  fieldA,
  min(fieldB),
  min(fieldC),
  min(fieldD),
....
from my_table as a join other_table b on a.id=b.id
group by fieldA

【讨论】:

  • 您如何确定 MIN 可以准确使用?在阅读了“实际上与其他人分组混淆数据”这句话之后,连接似乎是一种更好的方法。
  • 这可能意味着 fieldb、fieldc 等来自不同的记录,这不是一个好方法。
【解决方案3】:

我真的不明白你在找什么,但我不妨把它扔在那里....

select distinct fieldA, ....
from table_name

【讨论】:

    【解决方案4】:
    select 
      o.Customer, count(*) as ItemCount
    from 
      Orders o
    inner join 
      OrderDetails od on o.OrderID = od.OrderID
    group by 
      o.Customer
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-11-01
      • 1970-01-01
      • 2021-02-25
      • 1970-01-01
      • 2021-11-30
      • 2010-10-29
      • 1970-01-01
      相关资源
      最近更新 更多