所有列的SQL分组

时间:2009-04-29 04:42:32

标签: sql

是否有任何方法可以在不指定列名的情况下对表的所有列进行分组?像:

select * from table group by *

8 个答案:

答案 0 :(得分:36)

DISTINCT关键字


我相信你要做的是:

SELECT DISTINCT * FROM MyFooTable;

如果按所有列进行分组,则只是请求删除重复数据。

例如,包含以下数据的表格:

 id |     value      
----+----------------
  1 | foo
  2 | bar
  1 | foo
  3 | something else

如果您假设*表示所有列,则执行以下与SELECT * FROM MyFooTable GROUP BY *基本相同的查询:

SELECT * FROM MyFooTable GROUP BY id, value;

 id |     value      
----+----------------
  1 | foo
  3 | something else
  2 | bar

它删除了所有重复的值,这实际上使它在语义上与使用DISTINCT关键字相同,但结果排序除外。例如:

SELECT DISTINCT * FROM MyFooTable;

 id |     value      
----+----------------
  1 | foo
  2 | bar
  3 | something else

答案 1 :(得分:12)

他正在尝试查找并在表格中显示重复的行。

SELECT *, COUNT(*) AS NoOfOccurrences
FROM TableName GROUP BY *
HAVING COUNT(*) > 1

我们有一个简单的方法来实现这个目标吗?

答案 2 :(得分:11)

如果您使用的是SqlServer,则distinct关键字应该适合您。 (不确定其他数据库)

declare @t table (a int , b int)

insert into @t (a,b) select 1, 1
insert into @t (a,b) select 1, 2
insert into @t (a,b) select 1, 1

select distinct * from @t

结果

a b
1 1
1 2

答案 3 :(得分:3)

不,因为这从根本上意味着你不会对任何事情进行分组。如果按所有列分组(并且具有唯一索引的正确定义的表),则SELECT * FROM tableSELECT * FROM table GROUP BY *基本相同。

答案 4 :(得分:2)

简答:不。 GROUP BY子句本质上要求他们安排结果的顺序。不同的字段分组顺序会导致不同的结果。

指定通配符会使语句对解释和不可预测的行为保持开放。

答案 5 :(得分:2)

没了。你想做一些聚合吗?如果是这样,你可以做这样的事情来获得你需要的东西

;with a as
(
     select sum(IntField) as Total
     from Table
     group by CharField
)
select *, a.Total
from Table t
inner join a
on t.Field=a.Field

答案 6 :(得分:2)

我想对完整的结果集进行计数和求和。我用GROUP BY 1=1实现了所有人的分组。

答案 7 :(得分:-1)

您可以使用Group by All但要小心,因为将从SQL Server的未来版本中删除Group by All。