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)それぞれのを取得しname、それをテーブルに結合します。

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 FiddlewithDemoを参照してください

于 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 に答える