是否有任何方法可以在不指定列名的情况下对表的所有列进行分组?像:
select * from table group by *
答案 0 :(得分:36)
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 table
与SELECT * 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。