0

这可能是一个非常初学者的 sql 语句,但由于某种原因,我在为这个简单的表编写查询时遇到了困难:

id  name    value
1   Felix   1
2   Bob     2
3   Charles 3
4   Mike    4
5   John    4
6   Peter   2
7   Felix   2
8   Felix   3

这是一个简单的表格。我想按名称分组,每个组都有一个最小值。例如查询应该返回:

1 Felix 1
2 Bob 2
3 Charles 3
4 Mike 4
5 John 4 
6 Peter 2

我试过:

SELECT * FROM TABLE GROUP BY name HAVING min(value);

但它不起作用。

如果您可以在 CoreData 中给我一个 NSPredicate 也可以完成此操作,则可以加分。

谢谢!

4

3 回答 3

1
Select min(ID), Name, min(value)
From yourtable
Group by  name
于 2013-02-21T20:14:07.607 回答
1

您还可以使用子查询和JOIN. 子查询获取min(value)for eachname然后将其加入表中:

select t1.id,
  t1.name,
  t1.value
from yourtable t1
inner join
(
  select name, min(value) MinVal
  from yourtable
  group by name
) t2
  on t1.name = t2.name
  and t1.value = t2.minval
order by t1.id

请参阅带有演示的 SQL Fiddle

于 2013-02-21T20:19:12.950 回答
1

这是一个 NSFetchRequest 版本

NSFetchRequest* request = [NSFetchRequest fetchRequestWithEntityName:@"Table"];
[request setResultType:NSDictionaryResultType];
[request setReturnsDistinctResults:YES];
NSExpression *keyPathExpression = [NSExpression expressionForKeyPath:@"value"];
NSExpression* expr = [NSExpression expressionForFunction:@"min:" arguments:@[keyPathExpression]];
NSExpressionDescription *expressionDescription = [[NSExpressionDescription alloc] init];
[expressionDescription setName:@"value"];
[expressionDescription setExpression:expr];
[expressionDescription setExpressionResultType:NSInteger32AttributeType];
[request setPropertiesToGroupBy:@[@"name"]];
[request setPropertiesToFetch:@[@"name",expressionDescription]];
NSError* error = nil;
NSArray* rez = [managedObjectContext executeFetchRequest:request error:&error];
于 2013-02-22T10:12:10.853 回答