Group By每个只返回一行

时间:2014-06-17 07:27:03

标签: mysql sql sql-server group-by

我有一个表,希望按表合同的一列进行分组。但是当我尝试使用group时,它只返回一行,请检查Sqlfillder。

查询是:Select * from employees group by contract

SqlFillder

2 个答案:

答案 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