SQL返回每组的单行

Ale*_*der 0 mysql sql

我需要编写一个返回单个行或每组记录的查询.例如,我有一个带有列的表'employee':

id, name, type

1, John, full-time
2, Mike, full-time
3, Alex, part-time
4, Jerry, part-time
Run Code Online (Sandbox Code Playgroud)

我需要回复一些类似的东西

1, John, full-time
4, Alex, part-time
Run Code Online (Sandbox Code Playgroud)

谢谢

Tar*_*ryn 7

您将要使用GROUP BY应用聚合函数:

select min(id) id, 
  min(name) name,
  type
from yourtable
group by type;
Run Code Online (Sandbox Code Playgroud)

请参阅SQL Fiddle with Demo.

如果您不关心每种类型返回的id/name,则上述方法有效.如果你这样做,你可以使用:

select t1.id,
  t1.name,
  t1.type
from yourtable t1
inner join
(
  select min(id) id, type
  from yourtable 
  group by type
) t2
  on t1.id = t2.id
  and t1.type = t2.type
Run Code Online (Sandbox Code Playgroud)

要么

select t1.id,
  t1.name,
  t1.type
from yourtable t1
inner join
(
  select min(name) name, type
  from yourtable 
  group by type
) t2
  on t1.name = t2.name
  and t1.type = t2.type;
Run Code Online (Sandbox Code Playgroud)

演示