我有一个表,希望按表合同的一列进行分组。但是当我尝试使用group时,它只返回一行,请检查Sqlfillder。
查询是:Select * from employees group by contract
答案 0 :(得分:-1)
分组是没有意义的,但选择*。
您按合同分组。所以每个合同你得一行。然后你想要所有列,在合同旁边的id和名称。您没有指定每个合约要查看的ID和名称,因此您可以获得随机匹配。
一个好的规则是为您选择的每一列指定,按(在您的示例中为合同)或聚合(MIN,MAX等)进行分组。
Select contract, GROUP_CONCAT(name), id from employees group by contract;
合同按以下方式分组;在此示例中汇总了名称。那是怎么回事。但是id既没有分组,也没有在我的例子中汇总。所以根据规则,决定id是否应该被分组(所以每个id得到一行,这在这里没有意义,因为那将是表的每个记录)或聚合(例如:MIN(id))或根本没有选择。
答案 1 :(得分:-2)
Declare @employees table (
id int not null,
name char(30) not null,
[contract] char(30) not null,
PRIMARY KEY (id)
);
insert into @employees (id, name, [contract])
values
(1, 'John', 'full-time'),
(2, 'Mike', 'full-time'),
(3, 'Alex', 'part-time'),
(4, 'Jerry', 'part-time');
Select e.id,e.name,e.[contract] from @employees e group by e.id,e.name,e.contract